Serveur HTTP à partir d'un socket TCP (en Go) Problème avec un argument non valide
Vous essayez de créer un serveur HTTP à l'aide d'un socket TCP en Aller. Vous avez réussi à lier le socket à une interface VRF, mais lorsque vous démarrez le serveur HTTP, vous rencontrez une erreur : "accepter tcp 127.0.0.1:80 : accepter : argument non valide."
Solution
L'erreur indique que le socket peut être défectueux ou créé de manière incorrecte. Pour résoudre ce problème, vous pouvez utiliser un net.ListenConfig pour spécifier les options du socket avant de lier le socket. Cela garantit que le socket est configuré correctement, comme prévu par le package net.
La fonction ListenConfig.Control vous permet d'appeler le Control sur une fermeture syscall.RawConn, qui vous donne accès au descripteur de fichier utilisé dans la configuration du socket. Voici un exemple :
<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>
Dans cet exemple, la fonction controlOnConnSetup définit l'option de socket SO_BINDTODEVICE sur "vrfiface" avant que la socket ne soit liée. Cela garantit que le socket est lié à l'interface VRF spécifiée.
Après avoir effectué cette modification, vous devriez pouvoir démarrer avec succès votre serveur HTTP sans rencontrer l'erreur « argument invalide ».
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!