当调用select语句返回时,我们检查活动文件描述符以处理多个客户端的请求。
select(maxfd+1, &readfds, NULL, NULL, NULL);
即,select命令监视readfds集中的文件描述符。我的问题是,在处理客户端请求时,更多新连接到达侦听套接字,程序将如何捕获这些新连接?
答案 0 :(得分:3)
如果您在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()只是为您的程序提供连接)