/ / Liaison à LOOPBACK dans IPV6 - IPV4 est lié à ANY? - Winsock

Lier à LOOPBACK dans IPV6 - IPV4 est lié à tout? - winsock

Je jure que j’ai déjà vu cette question, mais je ne peux pas utiliser la chaîne de recherche magique pour la trouver pour moi:

Je crée un socket pour écouter en utilisant:

s = socket()...
getaddrinfo("::1",...);
bind()...

et je me retrouve avec un socket IPV6 lié à "::1 "et un socket IPV4 lié à" 0.0.0.0 ". Je m'attends à ce que le socket IPV4 soit lié à" 127.0.0.1 ". Pourquoi cela se produit-il et comment puis-je résoudre ce problème pour n'accepter que les connexions localhost sur le socket ipv4 wel?

C’est sur Win7 et j’ai déjà désactivé IPV6_V6ONLY.

Réponses:

1 pour la réponse № 1

getaddrinfo () et bind () ne fonctionnent que sur un seul IPà la fois. IPv4 se lie à 0.0.0.0 si vous ne spécifiez pas votre propre liaison explicite. On dirait que vous n’appelez bind () qu’une fois pour la partie IPv6 d’un socket double pile et en ignorant sa partie IPv4. Je ne sais pas si cela fonctionnera, mais essayez d'appeler bind () deux fois, une fois avec l'adresse IPv6 ":: 1" et une autre fois avec l'adresse IPv6 ":: FFFF: 127.0.0.1" (rappelez-vous que les adresses IPv4 le socket double pile doit être représenté en tant qu’adresses IPv6 mappées IPv4).