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

时间:2017-03-05 01:24:58

标签: linux perl sockets tcp

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

正在考虑的可能方法:

  1. IO ::套接字测试候选端口上的绑定。
  2. Net :: Telnet测试连接候选端口
  3. 的Linux :: PROC ::净:: TCP
  4. 最好的方法是什么?为什么?我不太喜欢测试绑定,因为它需要root用于特权端口,如果脚本出现问题,它可能会将所有测试端口留在time_wait中。我喜欢Linux :: Proc :: Net :: TCP,因为它速度快但不便携。

1 个答案:

答案 0 :(得分:4)

bind会立即明确地告诉您端口是否不可用(EADDRINUSE)。其他选择没有任何意义。

因为听起来你实际上并不关心你绑定的端口,在我看来,更好的方法是bind移植到0,它绑定到一个端口可用端口。您可以使用sockaddr_in确定套接字绑定到的端口。

另一方面,如果所需的端口在1..1023之内,那么您只需为您的程序保留端口即可。系统不会自动为这些端口分配服务。 (我不确定这在Windows上是否属实。)