Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich den Fehler „Ungültiges Argument' beim Erstellen eines HTTP-Servers auf einem benutzerdefinierten TCP-Socket in Go?

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

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 18:09:02920Durchsuche

How to Resolve

HTTP-Server vom TCP-Socket (in Go)

Problem:

Erstellen eines HTTP Server auf einer bestimmten VRF-Schnittstelle, die einen benutzerdefinierten TCP-Socket verwendet, führt zu dem Fehler „Akzeptiere TCP 127.0.0.1:80: Akzeptiere: ungültiges Argument.“

Lösung:

Einfügung von Socket-Optionen mit net.ListenConfig:

Um dieses Problem zu beheben, verwenden Sie eine net.ListenConfig, um die gewünschten Socket-Optionen einzufügen, bevor Sie syscall.Bind aufrufen. Dadurch wird sichergestellt, dass die Socket-Einrichtung gemäß den Spezifikationen des Netzpakets durchgeführt wird.

Schritte:

  1. Definieren Sie eine net.ListenConfig mit einer Control-Funktion Bearbeiten Sie den Rohdateideskriptor.
  2. Verwenden Sie die Control-Funktion, um syscall.SetsockoptString aufzurufen, um die VRF-Schnittstellenbindung festzulegen.
  3. Erstellen Sie einen Listener mit ListenConfig und bedienen Sie HTTP-Anfragen.

Codebeispiel:

<code class="go">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>

Dieser Ansatz ermöglicht das Hinzufügen benutzerdefinierter Socket-Optionen, bevor der Socket an eine IP-Adresse und einen Port gebunden wird, wodurch das beim Erstellen eines Sockets aufgetretene Problem behoben wird HTTP-Server auf einer bestimmten VRF-Schnittstelle.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Ungültiges Argument' beim Erstellen eines HTTP-Servers auf einem benutzerdefinierten 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