我正在运行一个尝试侦听端口 的应用程序34002
。当它尝试这样做时,它会收到错误:
Address already in use
当我用来lsof
查找罪魁祸首时,我发现它是一个出站 TCP 连接:
sudo lsof -i | grep "some-process"
some-command 53344 some-process 7u IPv4 344298 0t0 TCP <my-local-ip-redacted>:34002-><remote-ip-redacted>:https (ESTABLISHED)
我觉得这很奇怪。出站 TCP 会话在随机选择的端口上启动。 操作系统是否真的会阻止绑定到它随机选择的端口? 或者我理解错了?似乎将会话移至其他端口是有逻辑的。我无法想象这会是一种罕见的情况。
答案1
操作系统是否真的会阻止绑定到它随机选择的端口?
如果某个端口正在使用,那么它就是正在使用的。不管它是随机分配的还是明确选择的,重要的是它正在使用。建议您不要将服务绑定到临时端口范围内的端口,因为这样就有可能出现这种情况。