当调用 select 语句返回时,我们检查活动文件描述符以处理多个客户端的请求。
select(maxfd+1, &readfds, NULL, NULL, NULL);
即 select 命令监视 readfds 集中的文件描述符。我的问题是,在处理客户端请求时,更多新连接到达侦听套接字,程序将如何捕获这些新连接?
如果您在 select() 的 readfd 集中监视服务器套接字,您就会了解这一点。选择指示服务器套接字为可读,表示有连接等待,因此您可以接受()它。
...
FD_SET(server_sock, &readfds);
select(maxfd + 1,&readfds,NULL,NULL,NULL);
if(FD_ISSET(server_sock, &readfds)) {
int new_client = accept(server_socket, ... );
//add the new client to descriptors to monitor, etc..
(请注意,操作系统会进行初始 TCP 握手并建立连接,accept() 只是使连接可用于您的程序)