首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有必要对IO多路复用使用非阻塞文件描述符?

是否有必要对IO多路复用使用非阻塞文件描述符?
EN

Stack Overflow用户
提问于 2017-04-30 21:39:14
回答 1查看 364关注 0票数 3

Posix支持阻塞和非阻塞文件描述符。第二个可以用O_NONBLOCK标志打开。我的应用程序中有一个主循环,它轮询POLLINPOLLOUT事件的一些文件描述符集(poll sys调用)。我是否仍然可以使用阻塞文件描述符,因为我只在设置了POLLOUT时写入,在设置了POLLIN时只读?

EN

回答 1

Stack Overflow用户

发布于 2017-04-30 21:39:14

根据poll(2)手册页:

POLLOUT写入现在是可能的,尽管写入的空间大于套接字或管道中的可用空间,但仍会阻塞(除非设置了O_NONBLOCK )。

换句话说:如果与此fd相关的内核缓冲区中没有足够的空间,则写入大于缓冲区中可用空间的数据块将会阻塞。如果有可用的空间,它们的行为是相同的。

因此,您必须将所有文件描述符设置为非阻塞,尤其是TCP套接字,因为如果另一端的进程具有慢速连接,您可能会面临阻塞写入调用,直到客户端不会将每个IP包的所有ACK发回给您。

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

https://stackoverflow.com/questions/43707038

复制
相关文章

相似问题

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