2017-03-05 74 views
4

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

可能的方法:

  1. IO ::插座的备选端口上测试绑定。
  2. 的Net :: Telnet测试连接到备选端口
  3. 的Linux :: PROC ::网:: TCP

什么是最好的方法,为什么?我不太喜欢测试绑定,因为它需要root用于特权端口,如果脚本出现问题,它可能会将所有测试的端口保留在time_wait中。我喜欢Linux :: Proc :: Net :: TCP,因为它速度很快,但不便携。

+0

哼哼......为什么一个从未打开的端口进入time_wait状态? – ikegami

回答

4

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

既然听起来好像你并不在乎你绑定了什么端口,在我看来,更好的方法是将bind端口0绑定到可用的端口。您可以使用sockaddr_in来确定套接字绑定的端口。

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

+0

这对我来说不起作用,因为端口必须落在分配给服务的范围内。我不能只拿下一个可用的端口。 –

+0

这个范围是在1..1023之间吗?如果是这样,那么系统不会自动为这些端口分配一个服务,而只是由您决定为您的程序保留其中一个端口。 – ikegami

相关问题