(S'il vous plaît fermez ce fil si en double, j'ai essayé durement, mais n'ai pu trouver aucune question correspondante)
Il semble que certains systèmes d’exploitation / plates-formes écoutent les connexions IPv6 et IPv4 (TCP) lorsqu’elles sont liées à l’adresse de carte à puce IPv6, alors que d’autres n’écoutent que l’IPv6, comme indiqué dans:
avec les lignes suivantes:
Si votre plate-forme ne prend pas en charge la désactivation de cette option mais que vous souhaitez toujours écouter les connexions AF_INET et AF_INET6, vous devrez créer deux sockets d'écoute, une liée à chaque protocole.
Et dans la section "Fonctionnement d'IPv6 sur une plate-forme Java"
Et selon la bonne réponse dans cette question SO
Maintenant, je veux écrire du code Perl qui peutDéterminez si le système d'exploitation / la plateforme sous-jacente écoute à la fois IPv6 et IPv4 (si lié à IPv6). Si oui, je ne me lierai qu'à IPv6, sinon je créerai 2 sockets (1 pour IPv4 et un autre pour IPv6).
Je me demande quel pourrait être le meilleur moyen pour cela?
Comme mentionné dans IO :: Socket :: IP je pourrais utiliser
if( IO::Socket::IP->CAN_DISABLE_V6ONLY ) {
...
}
else {
...
}
Mais, je ne suis pas sûr si cela me dira exactement
si le système d'exploitation / la plateforme sous-jacente écoute à la fois IPv6 et IPv4 (si lié à IPv6)
Ou il suffit de dire que le
L'option de socket IPV6_V6ONLY ne peut pas être désactivée
Réponses:
4 pour la réponse № 1il indique simplement que "l'option de socket IPV6_V6ONLY ne peut pas être désactivée"
C'est correct.
Ce que vous pouvez faire, c’est essayer de créer un PF_INET6socket, puis en cas de succès, vérifiez son option de socket IPV6_V6ONLY. Si cela est vrai, le socket n’écoute que sur IPv6 et pas sur IPv4 également. Vous devrez donc en créer un autre. S'il est faux, le socket capturera à la fois IPv6 et IPv4, et ce socket sera suffisant.