使用 perl 确定 tcp 端口是否可用的最佳方法是什么。我想在创建网络服务之前选择一个端口。这一切都将使用自动化完成,要求是为服务构建配置,包括服务使用范围内的可用 tcp 端口。
正在考虑的可能方法:
- IO::Socket 测试候选端口上的绑定(bind)。
- Net::Telnet 测试连接到候选端口
- Linux::Proc::Net::TCP
什么是最好的方法,为什么?我不太喜欢测试绑定(bind),因为它需要 root 特权端口,如果脚本出现问题,它可能会将所有测试端口留在 time_wait 中。我喜欢 Linux::Proc::Net::TCP,因为它速度快但不可移植。
最佳答案
bind
将立即明确地告诉您端口是否可用 (EADDRINUSE
)。其他选项没有任何意义。
因为听起来您实际上并不关心绑定(bind)到哪个端口,所以在我看来更好的方法是绑定(bind)
到端口0
,它绑定(bind)到可用端口。您可以使用 sockaddr_in
确定套接字绑定(bind)到的端口。
另一方面,如果所需的端口在 1..1023 范围内,那么您只需为您的程序保留端口即可。系统不会自动为这些端口分配服务。 (我不确定在 Windows 上是否如此。)
关于linux - 确定 TCP 端口是否可用的最佳 perl 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42603389/