linux - 确定 TCP 端口是否可用的最佳 perl 方法

标签 linux perl sockets tcp

使用 perl 确定 tcp 端口是否可用的最佳方法是什么。我想在创建网络服务之前选择一个端口。这一切都将使用自动化完成,要求是为服务构建配置,包括服务使用范围内的可用 tcp 端口。

正在考虑的可能方法:

  1. IO::Socket 测试候选端口上的绑定(bind)。
  2. Net::Telnet 测试连接到候选端口
  3. 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/

相关文章:

linux - Sonarqube 6.7 从 JVM 获得 ping 响应并突然在 AWS 上停止

python - 如果进程挂起/崩溃,如何重新启动 python 脚本

perl - 我的声明会发生什么?

c - 如何连接到宽带共享 IP 中的客户端

java - Web 服务与 TCP/IP 套接字 (Java) + SQL 连接

linux - 我怎样才能让 pyinstaller 在 Ubuntu 上工作?

java - 帮助我创建 JojoMips 算法,用于 Java VM 的 BogoMips

javascript - 除非在 Perl 中相当于 !在 JavaScript 中?

perl - 在 perl 归档 tar 中将 CHOWN 设置为 0

c# - System.Argument 出现异常 :Specified argument was out of range of valid value