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:
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!