在LINUX上打开C中的O_NONBLOCKING

Wor*_*Bee 3 c sockets linux tcp

***背景****我是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()
Run Code Online (Sandbox Code Playgroud)

感谢您抽出宝贵时间来看看这个

Ant*_*nko 6

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