这是select语句的原型(根据手册页):
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
struct timeval *timeout);
我知道如何使用readfds参数:使用此参数,您可以看到数据是否已写入您的某个套接字。另一方面,我找到的writefds页面声明这是“如果有任何套接字准备发送()数据到”。但是,这是什么意思?在Quin和Shute的Windows套接字网络编程中,它说它检测连接状态或可写状态。这有什么意义?是否只是检查套接字是否仍然连接到连接的客户端并测试是否有任何用途写入该套接字?
那么:通常使用writefds的是什么?
答案 0 :(得分:8)
如果您继续写入TCP
套接字而另一方收不到您发送的速度,则会出现 write
阻止的时间。你想避免这种情况,所以你需要测试“你可以不受阻塞地写”。因为这通常不会在测试程序中发生,所以它可能会受到冲击,但 write(2)
和send(2)
可以阻止。
因此,如果select(2)
表示在fd
中设置writefds
,则表示其上的任何write
或send
实际上至少会写入一个字节阻塞。
来自the standard:
pselect()函数应检查其文件描述符集 地址在readfds, writefds 和errorfds参数中传递 是否有一些描述符可供阅读 已准备好写,或者有待处理的特殊情况, 分别