我正在编写一个能够接收和向客户端发送消息的服务器。
我正在使用 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/