Maison >développement back-end >Golang >Comment résoudre l'erreur « Accepter : argument invalide » lors de la création d'un serveur HTTP sur un socket TCP dans Go ?
Serveur HTTP à partir d'un socket TCP dans Go : Dépannage d'une erreur « Accepter : argument invalide »
Ce problème survient lors de la tentative de création d'un HTTP serveur sur un socket TCP au sein d’une interface VRF spécifique. Bien que le socket soit correctement lié au VRF, le démarrage du serveur HTTP entraîne une erreur indiquant « accepter tcp 127.0.0.1:80 : accepter : argument invalide ».
Comprendre le problème
Cette erreur suggère que la configuration du socket peut être incorrecte ou défectueuse. Cependant, il est essentiel de noter que la liaison VRF n'est pas directement à l'origine du problème mais est simplement incluse dans le code fourni à titre de contexte.
Résolution
Pour résoudre ce problème problème, il est nécessaire de s'assurer que le socket est configuré correctement selon les exigences du package net. Un net.ListenConfig peut être utilisé pour spécifier les options de socket souhaitées avant d'appeler syscall.Bind.
Exemple de code
Le code suivant démontre l'utilisation de net.ListenConfig pour résoudre le problème de configuration du socket :
<code class="go">import ( "context" "fmt" "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) } // ... Do something with the listener 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>
Explication
La fonction ListenConfig.Control donne accès au syscall.RawConn, qui permet la manipulation du descripteur de fichier sous-jacent avant la liaison de socket réelle est effectuée. La fonction Control est invoquée avec une fermeture qui spécifie l'option de socket souhaitée, dans ce cas, une liaison à une interface VRF spécifique.
En utilisant ListenConfig, le processus de configuration du socket est correctement synchronisé avec les attentes du net. package, en s'assurant que le socket est correctement configuré pour le fonctionnement du serveur HTTP.
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!