我希望使用相同的套接字fd进行读写操作。让我们说“fd”就是那个我正在处理的那个
FD_SET(fd, &readfd);
FD_SET(fd,&writefd);
select(fd+1, &readfd, &writefd, 0,200):
会保持良好状态,否则会将错误归还给我。
我认为因为writefd和readfd是不同的集合,所以在两个集合中都可以设置相同的fd。如果我错了,请纠正我。
由于 Arpit
感谢您的快速回复..我可以在轮询POLLIN和POLLOUT中执行与相同fd相同的行为。
答案 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将会触发。