【发布时间】:2011-11-30 01:36:49
【问题描述】:
我正在使用 select 函数在我的套接字之间进行通信。我有一个 while 循环,我有 -
while(!done) {
FD_ZERO(&read_flags);
FD_ZERO(&write_flags);
FD_SET(comm_fd1, &read_flags);
FD_SET(comm_fd2, &read_flags);
FD_SET(STDIN_FILENO, &read_flags);
FD_SET(comm_fd1, &write_flags);
FD_SET(comm_fd2, &write_flags);
FD_SET(STDIN_FILENO, &write_flags);
//call select
sel = select(comm_fd1+comm_fd2+1, &read_flags, &write_flags, (fd_set*)0, &waitd);
在客户端使用不同的变量也是如此。我从在线教程中获得了这种基本技术,然后就开始使用它。然后它击中了我 - 为什么我每次循环时都要清除集合并添加文件描述符?如果它们已经添加,为什么要清除它们并再次添加?所以我在此之前只尝试过一次,并且代码不再起作用了。有人可以解释为什么吗?仅仅是因为select修改了集合的内容吗?感谢您提供任何帮助和/或见解。
【问题讨论】:
标签: c++ select tcp file-descriptor