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
Socket如何在C中接受多个连接_C_Sockets - Fatal编程技术网

Socket如何在C中接受多个连接

Socket如何在C中接受多个连接,c,sockets,C,Sockets,你好,我有一个很简单的问题 我用C语言编写了一个简单的套接字服务器/客户端程序 我希望服务器端程序永远接受新的连接 我希望它能够在执行其他操作时接受更多连接 所以我的问题是:最好的方法是什么 -我应该在我的子进程中进行fork和accept循环吗 -我应该在父进程中进行fork和accept循环,并继续运行我的 子进程中的操作 或者还有比使用叉子更好的方法吗 谢谢,再见最好的方法可能是使用fd_set和select,而无需在每次接受新的传入连接时进行分叉。 这里有一个很好的解释:互联网上有成千上

你好,我有一个很简单的问题

我用C语言编写了一个简单的套接字服务器/客户端程序

我希望服务器端程序永远接受新的连接

我希望它能够在执行其他操作时接受更多连接

所以我的问题是:最好的方法是什么

-我应该在我的子进程中进行fork和accept循环吗

-我应该在父进程中进行fork和accept循环,并继续运行我的 子进程中的操作

或者还有比使用叉子更好的方法吗


谢谢,再见

最好的方法可能是使用fd_set和select,而无需在每次接受新的传入连接时进行分叉。
这里有一个很好的解释:

互联网上有成千上万的关于C语言套接字和网络编程的教程。他们中的大多数人都会有关于如何并行使用多个连接的部分,或者在单个线程中使用轮询,或者使用多个线程,或者使用多个不同的进程。另一种方法是在单个线程中围绕要选择的调用运行事件循环,该线程可以在接受套接字和通过接受返回的所有其他套接字上执行非阻塞I/O操作。我通常就是这样做的;它是否可取在很大程度上取决于您试图创建的程序类型,特别是提供给各种TCP连接的功能是否需要彼此通信,最常见/最有效的方法是生成一个“线程池”,然后当每个传入连接都被“接受”时,将生成的套接字传递给一个空闲线程。该线程将自己标记为忙碌,然后与该客户机进行所有通信,然后在完成所有通信后,关闭该套接字并将自己标记为空闲