c - 无法理解 select() 中 write_fds 的使用 - c

标签 c sockets

我正在编写一个能够接收和向客户端发送消息的服务器。 我正在使用 select() 来跟踪所有连接的客户端。

选择(max_fd+1,&read_fd,&write_fd,NULL,NULL);

我确实理解 read_fds 在 select 中的使用 - 如果一些客户端向我发送数据或试图连接到服务器,select 将被唤醒,并且 read_fd 将包含我的所有 fd可以从他们那里读取数据。 但是,我无法理解 write_fds 的使用:
由于服务器程序中 write_fd 的更改,我看不到 select 如何以及何时唤醒(因此我认为我不需要使用它)。

我将感谢所有将阐明 write_fd 用法的人。谢谢!

最佳答案

当使用 TCP 套接字时,任何发送的数据都必须存储在套接字缓存中,直到远程端确认它已收到数据(通过确认数据)。如果您发送数据的速度快于远程端消耗数据的速度,您最终会填满缓冲区。此时,如果您使用的是阻塞套接字,则发送将阻塞,直到可以将数据放入缓冲区。此时,套接字(文件描述符)不可写,select 将阻塞,直到缓冲区有可用于写入的空间。

关于c - 无法理解 select() 中 write_fds 的使用 - c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6073618/

相关文章:

c - 在 C 中获取和打印字符?

c - 如何在 C 中调用 COM 组件

c - 不同说明符的 EOF 值不同?

c - 为什么C标准库没有提供知道分配内存大小的功能?

c - 使用 C 中的随机源端口打开从客户端到服务器的多个 TCP 连接

Python TCP 套接字 : How to know if a specific connection has sent information

c - Dart RawSockets 有什么用?

c - 作为其他结构中的第一个定义的嵌套结构是否具有零偏移量?

.net - Socket 异步发送和接收数据

没有 while(true) 循环的 C# 非阻塞套接字