***背景****我是TCP新手,所以我有问题,可能有点基本。 我试图在接收数据的套接字上打开O_NONBLOCK。 直到现在,我已经尝试了不同的方式来设置O_NONBLOCK,itcl()和fcntl()。 现在我试图让fcntl()工作。
我的问题:你应该在连接套接字之前或之后设置O_NONBLOCK?
**我目前执行的fcntl()是基于closures代码之前的链接:
如何将套接字重置为阻塞模式(将其设置为非阻塞模式后)?
//set socket to NONBlocking on = fcntl(Socket,F_GETFL); on = (on | O_NONBLOCK); if(fcntl(Socket,F_SETFL,on) < 0) { perror("turning NONBLOCKING on failed\n"); } // DO CONNECT rc = connect()
感谢您花时间看这个
你应该设置O_NONBLOCK
只要你想。 如果在connect
之前进行connect
,那么connect
也将是非阻塞的(返回EINPROGRESS
;您可以select
或poll
可写状态以等待其完成)。
而要回答第二部分,请使用相同的代码,但将O_NONBLOCK位关闭而不是打开。