我有一个充当 HTTP 服务器的第三方库。我将一个地址和端口传递给它,然后它用它来监听传入的连接。这个库以这样一种方式进行侦听,即它不接收端口的独占使用和它绑定到的地址。结果,我可以多次监听同一个端口。
我需要在同一个进程中运行这个 HTTP 服务器的多个实例。每个实例都有一个默认端口,但如果该端口不可用,则应使用下一个可用端口。这就是我的问题所在;我最终可以让两个 HTTP 服务器在同一个端口上侦听。
我无法更改 HTTP 服务器的代码,如果 HTTP 服务器无法侦听我给它的端口,它不会提醒我,因此我必须能够在启动每个 HTTP 服务器之前检查端口是否已在使用中。我尝试通过绑定我自己的套接字并将 SO_REUSEADDR 设置为 FALSE 和 SO_EXCLUSIVEADDRUSE 设置为 TRUE 来检查端口是否已经被监听,但是当现有的 HTTP 服务器已经在该端口上监听时,绑定和监听调用都会成功。
这个HTTP服务器是如何达到这个效果的,我怎样才能准确地检查一个端口是否正在以这种方式被监听?