Ste*_*ing 23 c++ select tcp file-descriptor clear
我正在使用select函数在我的套接字之间进行通信.我有一个循环,我做 -
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);
Run Code Online (Sandbox Code Playgroud)
和客户端的不同变量相同.我从在线教程中获得了这个基本技术,并且随之而来.然后它打了我 - 为什么我每次循环时清除集合并添加文件描述符?如果它们已经添加,为什么要清除它们并再次添加?所以我尝试在此之前只执行一次,并且代码不再相同.有人可以解释原因吗?是否因为select修改了集合的内容?任何帮助和/或见解表示赞赏.
Dav*_*e S 25
当select返回时,它已经更新了台,以显示其文件描述符已成为准备好读/写/异常.所有其他标志已被清除.
重新启用在启动另一个选择之前清除的文件描述符非常重要,否则,您将不再等待这些文件描述符.
至于重新清除,它是一个很好的习惯,因为如果你需要更改文件描述符集(例如将新打开的套接字添加到读取集),你将需要清除它并重建每次都这样,所以当程序的状态发生变化时它是正确的.
| 归档时间: |
|
| 查看次数: |
19026 次 |
| 最近记录: |