Así que estoy haciendo un servidor para mi ascensor en Go, y estoy ejecutando la función "handler" como un goroutine con una conexión TCP. Quiero que lea desde una conexión, y si no se detecta señal dentro de un cierto intervalo de tiempo, quiero que devuelva un error.¿Cómo puedo hacer net.Read wait for input in golang?
func handler(conn net.Conn){
conn.SetReadTimeout(5e9)
for{
data := make([]byte, 512)
_,err := conn.Read(data)
}
}
Mientras Tengo un cliente que envía la materia sobre la conexión parece estar funcionando bien, pero tan pronto como el cliente deja de enviar la función devuelve el net.Read EOF error y se inicia un bucle sin retraso alguno .
Esto podría ser como se supone que funciona la lectura, pero ¿alguien podría sugerir otra forma de manejar el problema sin tener que cerrar y abrir la conexión cada vez que quiero leer algo?
conn.SetReadTimeout (5e9) no es lo que quieres. SetReadTimeout espera un tiempo absoluto, no una duración. Intente especificar como "time.Seconds * 10" y el compilador se quejará. Lo que está diciendo arriba es que quiere que la conexión expire a 5000 segundos después del 1 de enero de 1970. Por lo tanto, no esperará en absoluto. En su lugar, desea algo con el efecto de conn.SetReadTimeout (time.Now(). Add (time.Seconds * 10)) para un tiempo de espera de diez segundos. – Crunge