Serveur HTTP depuis TCP Socket (en Go)
Problème :
Création d'un HTTP serveur sur une interface VRF spécifique utilisant un socket TCP personnalisé entraîne l'erreur "accepter tcp 127.0.0.1:80 : accepter : argument invalide."
Solution :
Injection d'options de socket à l'aide de net.ListenConfig :
Pour résoudre ce problème, utilisez un net.ListenConfig pour injecter les options de socket souhaitées avant d'appeler syscall.Bind. Cela garantit que la configuration du socket est effectuée conformément aux spécifications du package net.
Étapes :
Exemple de code :
<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>
Cette approche permet d'ajouter des options de socket personnalisées avant de lier le socket à une adresse IP et un port, résolvant ainsi le problème rencontré lors de la création d'un Serveur HTTP sur une interface VRF spécifique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!