0

所以,我有以下代码:

  def LSCPHandler.send_message(message, hostname, port)
s = TCPSocket.open(hostname, port)
s.print message
ret = s.recv(1024)
s.close 
LSCPHandler.parse_error(ret)
return ret  

结尾

通常情况下,它工作得很好。我正在与之交谈的服务器通常会很快返回响应,并且一切都很好。

然后,今天,服务器出了点问题。不是我的问题,但是,这导致我的整个应用程序挂起,等待 recv 超时。这并不完全是最优的。

如果我没有立即听到回音,有没有办法让 recv 超时?我尝试查看 ruby​​ 文档,但它真的让我感到困惑(即 TCPSocket 只实现了三个方法,它们都没有 open 或 recv,它的 Socket 父类也没有实现这些方法。而且 Socket 的父类似乎是 Object ? 我完全糊涂了)

4

1 回答 1

3

您可以将套接字上的接收超时套接字选项设置为默认值以外的其他值。棘手的一点是选择一个在所有用例中仍然有效的合适号码,即您不希望您的recv呼叫过早超时。

s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
于 2010-02-01T17:19:21.893 回答