Ruby TCPSocket recvブロックおよびブロックに戻っ
-
24-09-2019 - |
質問
そこで、以下のコード:
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のみ実施の方法によって明らかにした開recv、その親クラスのソケットなimplementeこれらの方法。ソケットの親クラスが表示されるオブジェクト?私は徹底混乱)
解決
あなたは、デフォルト以外の何かにソケットのタイムアウトソケットオプションを受け取る設定することができます。トリッキーなビットは、つまり、あなたがあまりにも早くタイムアウトにごrecv
コールをしたくない、まだすべてのユースケースで動作すること、適切な数を選択することです。
s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
所属していません StackOverflow