3

***背景**** 我是 TCP 新手,所以我的问题可能有点基本。我正在尝试在接收数据的套接字上打开 O_NONBLOCK。到目前为止,我已经尝试了不同的方法来设置 O_NONBLOCK、itcl() 和 fcntl()。现在我正试图让 fcntl() 工作。

我的问题:你应该在连接套接字之前还是之后设置 O_NONBLOCK ?

**我当前的 fcntl() 实现基于代码之前的链接:

如何将套接字重置为阻塞模式(在我将其设置为非阻塞模式之后)?

//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()

感谢您花时间看这个

4

2 回答 2

6

您应该随时设置O_NONBLOCK。如果你在之前这样做connect,那么connect也将是非阻塞的(返回EINPROGRESS;你可以selectpoll可写状态等待其完成)。

于 2013-01-31T18:17:47.187 回答
0

要回答第二部分,请使用相同的代码,但将 O_NONBLOCK 位关闭而不是打开。

于 2013-01-31T22:05:09.503 回答