网络:多个进程能否监听同一个端口号?

Posted 小弟季义钦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络:多个进程能否监听同一个端口号?相关的知识,希望对你有一定的参考价值。

我们都知道socket是网络上两个进程之间的双向通信链路, 即

socket = 《A进程的IP地址:端口号,B进程的IP地址:端口号》

 

那么有个问题就很有意思了,不同的进程可以监听在同一个IP地址:端口号么?

根据Unix网络编程中的知识可知,服务端监听一个端口会经历:

1、根据套接字类型(Ipv4,Ipv6等)创建套接字socket

2、将套接字bind绑定到具体的网络地址和端口号

3、调用listen开始在这个套接字上进行监听。

Unix提供了一个接口setsockopt()可以在bind之前设置套接字选项,其中就包括REUSEADDR这个选项,表明可以多个进程复用bind函数中指定的地址和端口号。

由此可知多个应用(进程),包括同一个应用多次,都是可以绑定到同一个端口进行监听的。对应地C++、NET等高级语言也都提供了对应的接口。


从一些例子也可以看出,比如有时候你在服务器上执行netstat -ano可能会发现同一个应用程序在同一个端口上有多个监听,这是因为一些服务端应用程序可能会异常退出或者没有完全释放套接字,但是需要在重新启动时还能够再次监听同一个端口,所以需要能够具备重复监听同一个端口的能力,因此也出现上述情形。

以上是关于网络:多个进程能否监听同一个端口号?的主要内容,如果未能解决你的问题,请参考以下文章

Linux08-Linux查SSH\FTP端口号

网络端口号的划分

linux下怎么查看程序使用的端口号

通过进程pid号来查看对应的监听的端口号

Linux在Linux中查看进程占用的端口号

linux通过端口号定位进程的几种方法