1

当调用 select 语句返回时,我们检查活动文件描述符以处理多个客户端的请求。

select(maxfd+1, &readfds, NULL, NULL, NULL);

即 select 命令监视 readfds 集中的文件描述符。我的问题是,在处理客户端请求时,更多新连接到达侦听套接字,程序将如何捕获这些新连接?

4

1 回答 1

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() 只是使连接可用于您的程序)

于 2012-04-05T12:09:47.727 回答