在BSD套接字编程的上下文中,我遇到的每个示例和讨论中,似乎都建议将文件描述符设置为非阻塞I / O模式的推荐方法是使用O_NONBLOCK
标志fcntl()
,例如
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
我从事UNIX的网络编程已经有十多年了,并且一直使用该FIONBIO ioctl()
调用来执行此操作:
int opt = 1;
ioctl(fd, FIONBIO, &opt);
从来没有真正考虑过为什么。只是这样学习而已。
有没有人对一个或另一个可能有的优点发表评论?我认为可移植性的位置有所不同,但不知道在何种程度ioctl_list(2)
上没有谈到单个ioctl
方法的这一方面。