Сокет в Ruby слепо зависает при попытке проверить автономный сервер - PullRequest
0 голосов
/ 23 августа 2011

Я использую следующий код, чтобы проверить состояние сервера определенного игрового сервера и проверить, подключен ли игровой сервер к сети.

  begin
    sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
    sockaddr = Socket.sockaddr_in(game_server.gameserver_port, game_server.gameserver_hostname)
    sock.connect(sockaddr)
    server_status.status = 1
  rescue
    server_status.status = 0
  end

Однако кажется, что код вслепую зависает на линии, никуда не переходя sock.connect (sockaddr), и не выдает ошибку, когда на этом порту нет служб, прослушивающих этот порт. Есть ли лучший способ сделать это в Ruby?

1 Ответ

0 голосов
/ 23 августа 2011

Может ли тайм-аут быть хорошим решением?

require 'timeout'

begin 
    timeout(5) do
        # socket stuff...
    end
rescue Timeout::Error
    puts "Timed out!"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...