特定のポートが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
例外をスローすることです(ポートが閉じている場合)。したがって、私の質問は次のとおりです。
このコードを修正して1秒待つだけにすることはできますか(false
それまでに何も返されない場合は戻ります)、または特定のホストで特定のポートが開いているかどうかを確認するためのより良い方法はありますか?
編集:私はRubyコードを好みますが、クロスプラットフォーム(Mac OS X、* nix、Cygwinなど)で動作する限り、bashコードの呼び出しも許容されます。