Maison  >  Article  >  développement back-end  >  Comment résoudre l'erreur « Argument invalide » lors de la création d'un serveur HTTP sur un socket TCP personnalisé dans Go ?

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 18:09:02920parcourir

How to Resolve

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 :

  1. Définissez un net.ListenConfig avec une fonction de contrôle pour manipuler le descripteur de fichier brut.
  2. Utilisez la fonction Control pour appeler syscall.SetsockoptString pour définir la liaison de l'interface VRF.
  3. Créez un écouteur à l'aide de ListenConfig et traitez les requêtes HTTP.

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!

Déclaration:
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