Pregunta

Por lo tanto, tengo el siguiente código:

  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

Lo que funciona bien, normalmente. El servidor que estoy hablando con la respuesta vuelve bastante rapidez, por lo general, y todo está bien.

A continuación, en la actualidad, algo salió mal con el servidor. No es mi problema, pero, esto dio lugar a toda mi colgante de aplicación, a la espera de recv el tiempo de espera. Esto no es exactamente óptima.

¿Hay alguna manera el tiempo de espera recv si yo no' escuchar algo de vuelta inmediatamente? He intentado buscar en la documentación de rubí, pero realmente me confunde (es decir TCPSocket sólo implementa tres métodos, ninguno de ellos se abren o recv, y de la clase padre de la toma de corriente no implemente estos métodos tampoco. Clase padre de Y Socket parece ser objeto ? estoy confundido a fondo)

¿Fue útil?

Solución

Se puede configurar el tiempo de espera reciben opciones del zócalo a otra cosa que el valor predeterminado. El truco es escoger un número adecuado que todavía funciona en todos los casos de uso, es decir, que no quieren que su llamada a recv tiempo de espera antes de tiempo.

s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top