我需要一个快速的方法来确定给定的端口是否是用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
),或者是否有更好的方法来判断给定主机上的给定端口是否打开?
Edit:调用bash代码也是可以接受的,只要它能跨平台工作(例如Mac OS X、*nix和Cygwin),尽管我更喜欢Ruby代码.