C select() writefds

标签 c networking

我无法理解在 linux 中为 select() 设置的 writefds 添加描述符意味着什么。我写了一些简单的代码,将 stdout 的描述符添加到 writefds 集并使用 NULL 超时。现在,我的代码只是无限循环检查是否设置了这个描述符,如果设置了,它会打印“WRITING”。当我运行我的代码时,它只是不断打印“WRITING”到无穷大。当我为 stdin 执行此操作时,也会发生同样的事情。同样,循环中没有其他代码。 stdin/stdout 是否总是准备好写入?

最佳答案

这意味着您可以对该 fd 调用 write 并且内核 promise 不会阻塞并至少消耗 1 个字节。

更多细节。如果您的套接字未处于非阻塞模式并且与套接字关联的内核缓冲区已满,则内核将使您的线程进入休眠状态,直到它可以清空一些缓冲区并能够消耗您的部分写入。

如果您的套接字处于非阻塞模式并且内核缓冲区已满,写入将立即返回而不会消耗任何字节。

关于C select() writefds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931501/

相关文章:

c - timeval和微秒之间的精确转换

c - 如何确定 linux 串行端口上剩余的写入/输出缓冲区空间量?

c - Epoll tcp 服务器在接受连接时停止运行

ios - 在 iOS 应用程序中检索 URL

"sizeof(arr[0])"会导致未定义的行为吗?

c - 获取系统时间的奇怪方法

c - 我如何检查 C 中的文件是否为空?

Android避免缓存

java - 获取 DHCP IP 地址范围

java - 基本TCP通讯端口相关查询