単純にそのホストのポートがListenしてるかの確認はソケット接続を使うとサクッといける
コード
require "socket" begin s = TCPSocket.open('example.com', 80) rescue puts 'ng' else puts 'ok' ensure s.close end
ポイントは2つ。
- 接続できなかったときは例外が発生するので、beginで処理する必要がある
- 最後はclose
irb上だと以下のような挙動
irb(main):001:0> require "socket" => true irb(main):002:0> s = TCPSocket.open('localhost', 3000) => #<TCPSocket:fd 11> irb(main):003:0> s = TCPSocket.open('localhost', 9999) Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 9999 from (irb):3:in `initialize' from (irb):3:in `open' from (irb):3 from /Users/hoge/.rbenv/versions/2.3.3/bin/irb:11:in `<main>' irb(main):004:0> s.close => nil