是否可以在不同的进程中重用linux中的侦听TCP端口?
例如:进程A和进程B正在侦听服务器= INADDR_ANY和port = 10000
如果它不可能那么apache http服务器如何能够在不同的进程中收听端口#80。
提前致谢
答案 0 :(得分:1)
可以让多个进程在同一个端口上进行侦听,但正如您所见,无论是否使用SO_REUSEADDR
,您都无法使用不同的套接字执行此操作。
安排此问题的唯一方法是创建套接字bind()
并调用listen()
,然后复制它。您可以通过以下方式复制套接字:
fork()
- 两个子进程都将继承侦听套接字。这就是Apache的作用;或SCM_RIGHTS
消息通过UNIX域套接字连接向侦听套接字发送句柄。答案 1 :(得分:0)
Apache生成子进程,继承文件描述符。但是这些子进程实际上并没有监听服务器端口(80),而是在建立连接后打开与不同端口上的客户端进行交互。
2个进程无法侦听1个TCP端口。他们将如何分享传入的数据?
答案 2 :(得分:0)
2个进程可以侦听同一个端口。他们都会打电话给接受,只有一个人会接受第一个客户的回复。
你可以打开端口,产生100个孩子并让它们同时接受(套接字),并且它们将同时接收新的连接,每个连接一个,显然不一样。
如果您想从非相关进程执行此操作,SO_REUSEPORT标志允许多个进程绑定到同一地址,前提是所有进程都使用SO_REUSEPORT选项。