【发布时间】:2010-10-05 18:10:25
【问题描述】:
我需要一种快速的方法来确定给定端口是否已使用 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 代码。
【问题讨论】:
标签: ruby bash network-programming port