Posix支持阻止和非blcoking文件描述符。可以使用O_NONBLOCK
标志打开第二个。我的应用程序中有一个主循环,它会轮询poll
和POLLIN
个事件的文件描述符集(POLLOUT
sys调用)。我是否仍然可以使用阻止文件描述符,因为我只在POLLOUT
设置时才写,只在设置POLLIN
时才读取?
答案 0 :(得分:3)
正在轮询(2)手册页:
POLLOUT 现在可以写入,但写入大于套接字或管道中的可用空间仍会阻塞(除非设置了O_NONBLOCK)。
换句话说:如果与此fd关联的内核缓冲区中没有足够的空间,则写入大于缓冲区中可用空间的数据块将会阻塞。如果有可用空间,他们的行为相同。
因此,您必须将所有文件描述符设置为非阻塞,尤其是TCP套接字,如果另一方的进程连接速度较慢,则可能会阻止写入调用,直到客户端无法将您发回给所有文件描述符确认每个IP包。