Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中基于事件的socket编程_C_Sockets_Select - Fatal编程技术网

C语言中基于事件的socket编程

C语言中基于事件的socket编程,c,sockets,select,C,Sockets,Select,当select语句调用返回时,我们检查活动文件描述符以处理多个客户端的请求 select(maxfd+1, &readfds, NULL, NULL, NULL); 也就是说,select命令监视readfds集合中的文件描述符。我的问题是,当处理客户端请求时,更多的新连接到达侦听套接字,程序将如何捕获这些新连接 如果监视select()的readfd集合中的服务器套接字,您将了解到这一点。Select将服务器套接字指示为可读,这意味着有一个连接正在等待,因此您可以接受它 (请注意,操

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

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

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

如果监视select()的readfd集合中的服务器套接字,您将了解到这一点。Select将服务器套接字指示为可读,这意味着有一个连接正在等待,因此您可以接受它


(请注意,操作系统会进行初始TCP握手并建立连接,accept()只会使连接对您的程序可用)

您必须使用线程。在处理完当前连接之前,它不会这样做。当然,这是假设您只使用一个线程/进程。@Abhishek Sagar:您已经问了10个问题,但没有接受一个答案。如果答案解决了您的问题,请将其标记为已接受。@DanielKozar,这意味着,我应该使用线程来处理客户端请求,而主线程负责选择调用?那么,如果是这样的话,read_set将是main和另一个线程之间的共享变量,因此,需要使用互斥来正确运行程序吗?@nightcracker,好的,我会处理这个问题。
...
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..