2011-08-23 63 views
0

我使用以下代碼檢查特定遊戲服務器的服務器狀態,以查看遊戲服務器是否聯機。嘗試檢查離線服務器時,Ruby中的套接字盲目掛起

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(套接字地址),當沒有服務偵聽該端口不會引發錯誤。在Ruby中有更好的方法嗎?

回答

0

暫停是一個很好的解決方案嗎?

require 'timeout' 

begin 
    timeout(5) do 
     # socket stuff... 
    end 
rescue Timeout::Error 
    puts "Timed out!" 
end 
+0

不知道這是一個很好的解決方案,但它現在工作! – ichiro101