可以在select中使用相同的fd进行读写

时间:2010-11-12 09:41:35

标签: c linux select linux-kernel windows

我希望使用相同的套接字fd进行读写操作。让我们说“fd”就是那个我正在处理的那个

FD_SET(fd, &readfd);  
FD_SET(fd,&writefd);

select(fd+1, &readfd, &writefd, 0,200):

会保持良好状态,否则会将错误归还给我。

我认为因为writefd和readfd是不同的集合,所以在两个集合中都可以设置相同的fd。如果我错了,请纠正我。

由于 Arpit

感谢您的快速回复..我可以在轮询POLLIN和POLLOUT中执行与相同fd相同的行为。

4 个答案:

答案 0 :(得分:5)

这是可以的,并且是监视读取和写入的相同fd的正确方法。 select的最后一个参数是struct timeval,而不是整数。

答案 1 :(得分:1)

超时值应该是struct timeval。

struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
int iResult = select(fdmax+1, &read_fds, &write_fds, NULL, &tv) ;

答案 2 :(得分:0)

已经有一段时间了,但如果我没记错的话,那就太好了。

答案 3 :(得分:0)

是的,可以在写入和读取集中放入相同的fd。

如果您在fd上接收数据,readfd将触发并返回。

如果要在fd上发送数据,当缓冲区中有足够的空间发送时,writefd将会触发。