Heim >Backend-Entwicklung >Golang >Wie behebe ich den Fehler „Ungültiges Argument' beim Erstellen eines HTTP-Servers aus dem TCP-Socket in Go?

Wie behebe ich den Fehler „Ungültiges Argument' beim Erstellen eines HTTP-Servers aus dem TCP-Socket in Go?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 04:47:02673Durchsuche

How to Resolve 'invalid argument' Error When Creating HTTP Server from 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn