使用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上了。

3
0

百万级高并发WebRTC流媒体服务器设计与开发

备战5G音视频时代,抢先掌握服务端高级技能

2067 学习 · 375 问题

查看课程