1 Select 客户端链接数可以自定义。 #define FD_SETSIZE 2。 必须放在包含winsock头文件之前。
2 FD_SETSIZE 等于2时,只能接收一个客户端链接。 服务端socket会占用一个。
3 当 fd_set 结构体达到 FD_SETSIZE 时,FD_SET函数会失败。客户端recv会一直阻塞,但是tcp链接是会保持的。
4 FD_ZERO 清空集合。 FD_CLR 删除集合里的某个套接字。当有新链接进来时,需要删除服务端套接字,再调用 accept 接收新的客户端连接。
5 FD_ZERO, FD_CLR, FD_SET, 线程不安全。
6 FD_ISSET 判断socket是否在集合中,在的话说明有数据来了。如果是服务端socket,那么就是说明有新链接来了。如果是客户端socket,那么说明客户端发送数据过来了。
7 select之后。 fdRead 的总数是有客户端发送数据的socket总数。
参考:
1 https://blog.csdn.net/wwxy1995/article/details/88431650
2 https://blog.csdn.net/wjl18270365476/article/details/98474418
3 http://www.cppblog.com/kevinlynx/archive/2014/06/01/207172.html