Heim >Backend-Entwicklung >Golang >Wie behebe ich den Fehler „Ungültiges Argument' beim Erstellen eines HTTP-Servers aus dem TCP-Socket in Go?
HTTP-Server vom TCP-Socket (in Go) Problem mit ungültigem Argument
Sie versuchen, einen HTTP-Server mithilfe eines TCP-Sockets in zu erstellen Gehen. Sie haben den Socket erfolgreich an eine VRF-Schnittstelle gebunden, aber beim Starten des HTTP-Servers tritt ein Fehler auf: „accept tcp 127.0.0.1:80: Accept: invalid argument.“
Lösung
Der Fehler weist darauf hin, dass der Socket möglicherweise defekt oder falsch erstellt ist. Um dieses Problem zu beheben, können Sie eine net.ListenConfig verwenden, um Socket-Optionen anzugeben, bevor Sie den Socket binden. Dadurch wird sichergestellt, dass der Socket korrekt eingerichtet ist, wie vom Paket net erwartet.
Mit der Funktion ListenConfig.Control können Sie das Control-Methode für einen syscall.RawConn-Abschluss, der Ihnen Zugriff auf den Dateideskriptor gibt, der beim Socket-Setup verwendet wird. Hier ist ein Beispiel:
<code class="go">package main import ( "context" "log" "net" "syscall" ) func main() { lc := net.ListenConfig{Control: controlOnConnSetup} ln, err := lc.Listen(context.Background(), "tcp", "127.0.0.1:80") if err != nil { log.Fatal(err) } ln.Close() } func controlOnConnSetup(network string, address string, c syscall.RawConn) error { var operr error fn := func(fd uintptr) { operr = syscall.SetsockoptString(int(fd), syscall.SOL_SOCKET, syscall.SO_BINDTODEVICE, "vrfiface") } if err := c.Control(fn); err != nil { return err } if operr != nil { return operr } return nil }</code>In diesem Beispiel setzt die Funktion
controlOnConnSetup die Socket-Option SO_BINDTODEVICE auf „vrfiface“, bevor der Socket gebunden wird. Dadurch wird sichergestellt, dass der Socket an die angegebene VRF-Schnittstelle gebunden ist.
Nachdem Sie diese Änderung vorgenommen haben, sollten Sie in der Lage sein, Ihren HTTP-Server erfolgreich zu starten, ohne dass der Fehler „Ungültiges Argument“ auftritt.Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Ungültiges Argument' beim Erstellen eines HTTP-Servers aus dem TCP-Socket in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!