/ / Quel est le meilleur moyen de savoir si le système d'exploitation / la plateforme prend en charge le socket IPv6 pour écouter IPv4 également en Perl? - perl, sockets, ipv6

Quelle est la meilleure façon de savoir si OS / platform prend en charge IPv6 socket pour écouter IPv4 aussi bien en Perl? - perl, sockets, ipv6

(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:

pour l'argument V6Only

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 № 1

il 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.