是否可以在不同的进程中重用linux中的侦听TCP端口?
例如:进程A和进程B正在监听server=INADDR_ANY和port=10000
如果不可能,那么apache http服务器如何能够在不同的进程中侦听端口#80。
提前感谢
发布于 2011-05-17 15:34:27
可以让多个进程监听同一端口,但正如您已经看到的,无论是否使用SO_REUSEADDR,都不能使用不同的套接字来实现这一点。
安排此操作的唯一方法是创建套接字,对其执行bind()并调用listen(),然后复制它。您可以通过以下方式复制套接字:
fork() -两个子进程都将继承侦听套接字。这就是Apache所做的;或者SCM_RIGHTS消息通过UNIX域套接字连接发送到侦听套接字的句柄。发布于 2011-05-11 15:20:53
Apache派生子进程,子进程继承文件描述符。但是这些子进程实际上并没有监听服务器端口(80),而是在连接建立后打开的不同端口上执行与客户端的交互。
%2进程无法侦听%1 TCP端口。他们将如何共享传入的数据?
发布于 2011-05-11 15:36:35
2个进程可以监听同一端口。它们都会调用accept,并且只有一个会在第一个客户端返回accept。
您可以打开端口,派生100个子节点,并让它们同时接受(套接字)所有连接,它们将平等地接收新连接,每个连接一个,显然永远不会相同。
如果您希望从不相关的进程执行此操作,如果多个进程都使用SO_REUSEPORT选项,则SO_REUSEPORT标志允许多个进程绑定到相同的地址。
https://stackoverflow.com/questions/5960574
复制相似问题