Lesen von einer tcp-Verbindung in golang

In eine Aussage wie bytes_read, err := conn.Read(tmp), ich möchte das Lesen, versucht werden für x Sekunden, und wenn keine zu Lesen beginnt, möchte ich den code gehen Sie vor, einige verbindungen und Schleife wieder zurück und versuche zu Lesen. Könnte ich wählen-Fall und spawnen zwei goroutines, ein Versuch, das Lesen und das andere für das timeout. Aber hier, im Falle einer Zeitüberschreitung geschieht zuerst der code wird weiter gehen, überprüfen Sie die Bedingungen und wieder spawn eine routine, um zu versuchen zu Lesen von der Verbindung während der vorhergehenden lese-Routinen ist immer noch lebendig. Ich Wünsche, dass die bisherige routine stirbt, wenn timeout stattfindet.

Irgendwelche Vorschläge, wie ich Vorgehen kann?

  • Vielleicht ist das, was u brauchen, ist nur die SetReadDeadline für conn. if netErr, ok := err.(net.Error); ok && netErr.Timeout() doSomething
  • Danke! Das ist, was ich brauche. Aber können Sie mir helfen mit der syntax. Ich bin mit err2 := conn.SetReadDeadline(mal.Jetzt().Add(5 * Zeit.Sekunde)) | bytes_read, err := conn.Read(tmp) | err.Timeout (), die Ergebnisse in den Fehler, err.Timeout undefiniert (Typ Fehler hat kein Feld oder die Methode Timeout). Ich möchte prüfen ob Timeout() true oder false
  • ^_^ Überprüfen Sie die post unten.
InformationsquelleAutor user3740387 | 2016-01-20
Schreibe einen Kommentar