Frage

Also, ich habe den folgenden Code:

  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  

Ende

Welche ganz gut, normal funktioniert. Der Server Ich rede mit gibt die Antwort ziemlich schnell, in der Regel, und alles ist gut.

Dann heute, ging etwas mit dem Server falsch. Nicht mein Problem, sondern führte dies in meiner gesamten Anwendung hängen, wartet auf recv zu Zeit. Dies ist nicht gerade optimal.

Gibt es einen Ausweg recv zu Zeit, wenn ich ‚hört etwas zurück sofort nicht? Ich habe versucht, in der Ruby-Dokumentation suchen, aber es verwirrt mich wirklich (dh TCPSocket nur Arbeitsgeräte drei Methoden, keiner von ihnen öffnen oder recv, und es übergeordnete Klasse von Sockel dieser Methoden nicht implemente auch nicht. Und Sockel der Elternklasse erscheint Objekt zu sein ? ich bin throughly verwirrt)

War es hilfreich?

Lösung

Sie kann die Timeout-Socket-Optionen auf dem Sockel auf etwas anderes als der Standard erhalten. Der schwierige Bit ist eine geeignete Anzahl zu wählen, dass nach wie vor in allen Anwendungsfällen funktioniert, das heißt Sie wollen nicht zu früh Ihre recv Aufruf Timeout.

s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top