首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在unix套接字中异步和非阻塞有什么不同?

在unix套接字中异步和非阻塞有什么不同?
EN

Stack Overflow用户
提问于 2011-06-07 10:35:08
回答 1查看 7.8K关注 0票数 20

我在nginx中看到了这样的代码:

代码语言:javascript
复制
if(fcntl(ngx_processes[s].channel[0], F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK) == -1) {
...
if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) {
...

谁能告诉我fcntl(s, F_SETFL, fcntl(s, F_GETFL) | O_NONBLOCK)ioctl(s, FIOASYNC, &on)有什么区别,asyncnonblocking不是一回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-07 10:38:45

FIOASYNC切换文件描述符的O_ASYNC标志(通常在open(2)fcntl(2)中设置),这将要求内核在文件描述符准备好IO时向进程发送SIGIOSIGPOLL

O_ASYNC不常使用:

在信号处理程序中正确处理IO是极其困难的;它们最好像possible

  • because信号中断程序的控制流一样小,它们的运行成本比标准系统调用(如select(2)
  • )提供的信息更少:它们只报告一个fd就绪,而不是许多可能就绪的fd。

O_NONBLOCK不会向用户进程提供任何fd已准备好用于read(2)write(2)的通知--相反,它会更改read(2)write(2)以及类似调用的行为,以便在文件描述符未准备好读取或写入时立即返回。O_NONBLOCK通常与select(2)poll(2)similar calls结合使用,以保证客户端或服务器的主循环不会阻塞某个特定的对等点,从而使其所有对等点都处于饥饿状态。

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

https://stackoverflow.com/questions/6260114

复制
相关文章

相似问题

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