Maison > développement back-end > Golang > le corps du texte

Comment résoudre l'erreur « Argument invalide » lors de la configuration d'un serveur HTTP sur un socket TCP dans Go ?

Patricia Arquette
Libérer: 2024-10-24 17:56:02
original
295 Les gens l'ont consulté

How to Resolve

Serveur HTTP sur socket TCP en Go : résolution d'une erreur d'argument non valide

En Go, création d'un socket TCP, en le liant à un périphérique spécifique (interface VRF), et la configuration d'un serveur HTTP dessus peut être une tâche fastidieuse. Cet article traite de l'erreur courante « accepter tcp 127.0.0.1:80 : accepter : argument invalide » qui peut survenir au cours de ce processus.

Le problème

Le code fourni L'extrait montre une tentative d'établissement d'un socket TCP, de la lier à une interface VRF et de démarrer un serveur HTTP sur cette interface. Cependant, le serveur HTTP ne parvient pas à démarrer, ce qui entraîne l'erreur susmentionnée.

La solution

La configuration incorrecte du socket est à l'origine de cette erreur. Pour y remédier, nous utilisons un net.ListenConfig pour injecter les options de socket souhaitées avant l'étape syscall.Bind. Cette configuration garantit que la configuration du socket est gérée de manière appropriée et correspond aux attentes du package net.

Options d'injection avec ListenConfig

net.ListenConfig propose une méthode de contrôle qui permet nous pour introduire des options de socket personnalisées. Il permet d'accéder au descripteur de fichier brut utilisé dans la configuration du socket via une fermeture.

Le code ci-dessous montre comment injecter l'option SO_BINDTODEVICE à l'aide de la fonction ListenConfig.Control :

<code class="go">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>
Copier après la connexion

Par en plaçant ce code dans le champ Control de ListenConfig et en l'utilisant pour écouter sur une adresse TCP, nous pouvons injecter notre option de socket personnalisée avant de lier le socket :

<code class="go">lc := net.ListenConfig{Control: controlOnConnSetup}
ln, err := lc.Listen(context.Background(), "tcp", "127.0.0.1:80")</code>
Copier après la connexion

Cette approche garantit que le socket est configuré correctement et évite 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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!