sockets - 在套接字编程中,accept() 可以在多进程(线程)中使用同一个监听套接字吗?

标签 sockets pthreads

  1. 在父进程中打开一个监听套接字
  2. 在 child1,child2,child3.... 中调用 epoll_wait(listening_socket)。
  3. 如果有连接请求,在每个 child 中调用accept

最佳答案

一般来说,让多个线程在同一个套接字上执行 IO 而它们之间没有某种同步并不是一个好主意。在您的场景中,您可能会看到类似以下内容:

  • 传入的连接请求唤醒所有 N 个子线程中的 epoll_wait
  • 所有 N 个线程都调用 accept,1 个调用成功,N-1 个阻塞(或者失败,如果你的监听套接字是非阻塞的)

更常用的方法是让父线程循环调用监听套接字上的accept,并为每个传入请求启动一个子线程。 (或者,如果您担心线程创建开销,您可以有一个子线程池,在空闲时等待条件变量;父线程将新接受的套接字添加到队列中并使用 pthread_cond_signal 唤醒 child 来处理它。)

关于sockets - 在套接字编程中,accept() 可以在多进程(线程)中使用同一个监听套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2642236/

相关文章:

Linux无法通过管道获取数据

java - Android 中使用 VPN 的数据包嗅探器/过滤器

pthreads - pthread_create 和 EAGAIN

PHP 启动 :Unable to start dynamic library

c - C语言多线程服务器设计

c - 如何使用条件变量

node.js - 套接字.io : associate browser and computer with the connection

python - C 和 Python - 使用套接字进行通信

java - Tomcat连接器具有异步Servlet的工作能力和可伸缩性

multithreading - 不同平台的奇怪多线程输出