C中基于事件的套接字编程

时间:2012-04-05 09:17:24

标签: c sockets select

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

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

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

1 个答案:

答案 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()只是为您的程序提供连接)