是否可以在linux中重用TCP端口号

时间:2011-05-11 07:14:51

标签: linux apache sockets tcp

是否可以在不同的进程中重用linux中的侦听TCP端口?

例如:进程A和进程B正在侦听服务器= INADDR_ANY和port = 10000

如果它不可能那么apache http服务器如何能够在不同的进程中收听端口#80。

提前致谢

3 个答案:

答案 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选项。

link