2011-12-22 52 views
0

我有这个sniped,不会按我想要的那样工作。UDP套接字不会超时

def send(data) 
    socket = UDPSocket.open 

    Timeout::timeout(1.2) { 
    socket.send(data, 0, host, port) 
    resp = if select([socket], nil, nil, 3) 
     socket.recvfrom_nonblock(65536) 
    end 
    } 
end 

如果服务器(主机)缓慢或不存在,上述示例将锁定当前脚本。 它不会超时。任何想法为什么?

我使用Ruby 1.9.2

它的工作原理当服务器(主机)存在的aspected。

+0

FWIW,这个工程在ruby 1.9.3p0(2011-10-30)[x86_64-linux]。 – Sam 2011-12-22 16:50:29

回答

0

超时模块工作,它是代码,调用#send这是问题。