使用select的时候,关于FD_ISSET的问题
来源:5-2 通过select实现高性能服务器

没有蜡笔的小新
2021-01-28
老师,您好,请问一下,在讲解使用select实现tcp server的时候,有个地方如下:
if (FD_ISSET(socket_fd, &fd_sets)) { // 如果来的是新连接
//…
}
这里的理解应该是判断fd_sets里面有没有socket_fd,但是在for循环下面有:
FD_SET(socket_fd, &fd_sets);
也就是上面的if判断应该是会通过的才对把。
所以,不太明白这个地方if (FD_ISSET(socket_fd, &fd_sets))为啥表示"如果来的是新链接",希望老师讲解一下,谢谢!
写回答
1回答
-
没有蜡笔的小新
提问者
2021-01-28
补充回答,已经弄清楚了。原因在于,select的时候,会将之前加入到fd_set中但是没有事件发生的fd清空,换句话说,如果select之后,socket_fd还在fd_set,说明当前select的时候socket_fd发生了事件,也就是有新的请求连接到socket_fd上了。
30
相似问题