我需要一种快速的方法来确定给定端口是否已使用 Ruby 打开。我目前正在摆弄这个:
require 'socket'
def is_port_open?(ip, port)
begin
TCPSocket.new(ip, port)
rescue Errno::ECONNREFUSED
return false
end
return true
end
如果端口是打开的,它会很好用,但它的缺点是偶尔它会坐下来等待 10-20 秒,然后最终超时,抛出ETIMEOUT
异常(如果端口关闭)。我的问题是:
可以将此代码修改为仅等待一秒钟(false
如果到那时我们什么都没有返回,则返回)还是有更好的方法来检查给定端口是否在给定主机上打开?
编辑:调用 bash 代码也是可以接受的,只要它可以跨平台工作(例如,Mac OS X、*nix 和 Cygwin),尽管我更喜欢 Ruby 代码。