即
- 在父进程中打开一个监听套接字
- 在 child1,child2,child3.... 中调用 epoll_wait(listening_socket)。
- 如果有连接请求,在每个 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/