我希望使用相同的套接字 fd 进行读取和写入操作。假设“fd”是我正在研究的那个,在这种情况下
FD_SET(fd, &readfd);
FD_SET(fd,&writefd);
select(fd+1, &readfd, &writefd, 0,200):
会保持良好状态,否则会返回错误。
我认为由于 writefd 和 readfd 是不同的集合,因此可以在这两个集合中设置相同的 fd。如果我错了请纠正我。
我可以在 poll POLLIN 和 POLLOUT 中对同一个 fd 执行相同的行为吗?
这是可以的,也是监控同一个文件读写的正确方法。 select 的最后一个参数是一个 struct timeval,而不是一个整数。
超时值应该是一个struct timeval。
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
int iResult = select(fdmax+1, &read_fds, &write_fds, NULL, &tv) ;
已经有一段时间了,但如果我没记错的话,那就完全没问题了。
是的,同一个fd可以同时放入写集合和读集合中。
如果在fd上接收数据,readfd会触发并返回。
如果您在 fd 上发送数据,当缓冲区中有足够的空间来发送数据时,writefd 将触发。