非阻塞文件描述符Unix网络编程

时间:2009-11-14 16:24:51

标签: unix network-programming

我想问一下,什么时候我们需要在文件/套接字描述符上使用非阻塞标志意味着我们总是可以使用select函数调用来确定就绪描述符。这是对Unix网络编程V1第16.2节中的程序的引用。在该程序中,为什么作者在3个描述符stdin,stdout,socket上设置非阻塞标志。他还说EWOULDBLOCK永远不会发生。但他也说,时间从12.3秒减少到6.9秒。

1 个答案:

答案 0 :(得分:1)

<强>文件:

很好的打开调制解调器等设备需要一些时间来使用非阻塞FD(也称为O_NONBLOCK)进行初始化。这不仅适用于调制解调器,而且适用于需要构建自身以便适合使用的许多种类的字符设备,或者设备可能在由于某些其他原因将其自身发送为“就绪”之前阻塞的情况。

各种QRNG(量子随机数发生器)也需要这个标志,以及在发出'ready!'信号之前必须寻找对等点的各种类型的照明控制器。

此外,由于某些用户空间文件系统提供了已知的ioctl()接口以阻塞几秒钟...您可能想要也可能不希望传递非阻塞FD这种情况,取决于您允许的时间对有害睡眠的影响程度。

<强>插口:

如果您希望使用非阻塞I / O,而单个线程“管家”往往会遇到许多客户。一个常见的误解是认为 阻止免费 意味着 锁定免费 通过一些神秘的手段。它没有。事实上,要么通常都是另一种。