Следующий код работает с ruby 1.9.1 в Windows:
require 'socket'
def is_port_open?(ip, port)
s = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
sa = Socket.sockaddr_in(port, ip)
begin
s.connect_nonblock(sa)
rescue Errno::EINPROGRESS
if IO.select(nil, [s], nil, 1)
begin
s.connect_nonblock(sa)
rescue Errno::EISCONN
return true
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
return false
end
end
end
return false
end
Я еще не выяснил, почему оригинальный код is_port_open? () Не работает в Windows с ruby 1.9.1 (он работает в других ОС).