gpt4 book ai didi

c - 是否有必要在 IO 多路复用中使用非阻塞文件描述符?

转载 作者:行者123 更新时间:2023-12-04 02:05:32 28 4
gpt4 key购买 nike

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

最佳答案

根据 poll(2) 手册页:

POLLOUT Writing is now possible, though a write larger that the available space in a socket or pipe will still block (unless O_NONBLOCK is set).



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

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

关于c - 是否有必要在 IO 多路复用中使用非阻塞文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43707038/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com