Ruby - See if a port is open Ruby - See if a port is open ruby ruby

Ruby - See if a port is open


Something like the following might work:

require 'socket'require 'timeout'def is_port_open?(ip, port)  begin    Timeout::timeout(1) do      begin        s = TCPSocket.new(ip, port)        s.close        return true      rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH        return false      end    end  rescue Timeout::Error  end  return falseend


More Ruby idiomatic syntax:

require 'socket'require 'timeout'def port_open?(ip, port, seconds=1)  Timeout::timeout(seconds) do    begin      TCPSocket.new(ip, port).close      true    rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH      false    end  endrescue Timeout::Error  falseend


All other existing answer are undesirable. Using Timeout is discouraged. Perhaps things depend on ruby version. At least since 2.0 one can simply use:

Socket.tcp("www.ruby-lang.org", 10567, connect_timeout: 5) {}

For older ruby the best method I could find is using non-blocking mode and then select. Described here: