Question

Alors, je le code suivant:

  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  

end

Ce qui fonctionne très bien, normalement. Le serveur que je parle renvoie la réponse assez rapidement, en général, et tout va bien.

Alors, aujourd'hui, quelque chose a mal tourné avec le serveur. Pas mon problème, mais, cela a donné lieu à toute ma suspension de l'application, en attendant récept temps. Ce n'est pas exactement optimale.

Est-il possible de temporiser les recv si je ne » entends quelque chose immédiatement? J'ai essayé regardant la documentation de rubis, mais il me confond vraiment (c.-à-TCPSocket implémente seulement trois méthodes, aucun d'entre eux ouvert ou recv, et il est classe parente de Socket n'implemente pas ces méthodes non plus. Et la classe parente Socket semble être l'objet ? Je suis confus throughly)

Était-ce utile?

La solution

Vous pouvez régler la réception des options de socket de délai d'attente sur la prise à autre chose que la valeur par défaut. Le peu difficile est de choisir un nombre approprié qui fonctionne encore dans tous les cas d'utilisation, à savoir que vous ne voulez pas que votre appel recv à délai d'attente trop tôt.

s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top