UDP套接字不会超时

时间:2011-12-22 13:09:27

标签: ruby

我嗤之以鼻,不会按照我的意愿行事。

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

当服务器(主机)存在时,它可以正常工作。

1 个答案:

答案 0 :(得分:1)

超时块工作正常,调用#send的代码就是问题。