首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在LINUX上用C打开O_NONBLOCKING

在LINUX上用C打开O_NONBLOCKING
EN

Stack Overflow用户
提问于 2013-02-01 02:10:18
回答 2查看 1.9K关注 0票数 3

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

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

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

How to reset a socket back to blocking mode (after I set it to nonblocking mode)?

代码语言:javascript
复制
//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()

感谢您抽出时间来看这篇文章。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-01 02:17:47

您应该在需要的时候设置O_NONBLOCK。如果在connect之前执行此操作,则connect也将是非阻塞的(返回EINPROGRESS;对于可写状态,您可以使用selectpoll来等待其完成)。

票数 6
EN

Stack Overflow用户

发布于 2013-02-01 06:05:10

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14632346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档