在LINUX上的C中启用O_非阻塞

在LINUX上的C中启用O_非阻塞,c,linux,sockets,tcp,C,Linux,Sockets,Tcp,***背景**** 我是TCP新手,所以我有一个可能有点基本的问题。我试图在接收数据的套接字上打开O_NONBLOCK。到目前为止,我尝试了不同的方法来设置O_NONBLOCK、itcl()和fcntl()。现在我正在尝试让fcntl()工作 我的问题:你应该在连接插座之前还是之后设置O_NONBLOCK **我当前对fcntl()的实现基于代码之前的链接: //将套接字设置为非阻塞 on=fcntl(插座,F_GETFL); on=(on | O_非块); 如果(fcntl(插座,F_设置,

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

我的问题:你应该在连接插座之前还是之后设置O_NONBLOCK

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

//将套接字设置为非阻塞
on=fcntl(插座,F_GETFL);
on=(on | O_非块);
如果(fcntl(插座,F_设置,开启)<0)
{
perror(“打开非阻塞失败\n”);
}
//连接
rc=connect()

感谢您抽出时间查看此

您应该随时设置
O_NONBLOCK
。如果在
connect
之前执行此操作,则
connect
也将是非阻塞的(返回
EINPROGRESS
;您可以
选择
轮询
,等待可写状态完成)。

并回答第二部分,使用相同的代码,但将O_非块位关闭而不是打开。

是否有方法检查并确保其打开?是否要检查或确保其打开?不管怎么说,这就是你已经在
F_GETFL
(你可以在
on=fcntl(…)
之后插入“check”逻辑)。当我打开O_NONBLOCK时,我会得到“Invalid argument”和“I/O error”(22,5)。打开O_Non Block会打乱我的连接吗?当我注释掉
on=fcntl(Socket,F_GETFL)
on=(on | O_非块)有效。你从哪里得到这些错误?当然不是从
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()