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 をタイムアウトにする方法はありますか? ルビーのドキュメントを見てみましたが、本当に混乱しています(つまり、TCPSocketは3つのメソッドしか実装しておらず、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 に答える