J'essaie d'activer IPv6 dans une application Python 2 et j'ai des problèmes. Chaque fois que j'essaie de lier à un socket IPv6, une exception socket.error: getsockaddrarg: bad family
est levée. Je peux reproduire l'erreur simplement en faisant:Python 2 et IPv6
import socket
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('', 12345))
Ce code fonctionne bien si je cours en Python 3. Malheureusement, le script aurait besoin d'un effort de portage important de travailler en Python 3 et je préfère ne pas avoir à faire ça encore.
Y at-il quelque chose que je dois faire pour que IPv6 fonctionne en Python 2 ou suis-je S-O-L?
Détails: Python 2.6.2 (R262: 71600, le 24 octobre 2009, 03:16:31) [GCC 4.4.1 [gcc-4_4-branche révision 150839]] sur linux2 (il est le Python qui est partie de l'installation standard d'openSUSE 11.2).
Mise à jour
Après AndiDog m'a aidé à comprendre que socket.AF_INET6 est définie même si IPv6 est pas configuré, j'ai découvert socket.has_ipv6
. Ceci est défini comme un booléen et indique si Python a été construit avec IPv6.
Python 2.6.1 fonctionnant sur FreeBSD fonctionne sans problème. – sberry
Est-ce que cela fonctionne avec Python 3 sur le * même * système d'exploitation ou un autre système d'exploitation? – AndiDog
@AndiDog - oui, cela fonctionne sur Python 3 sur le même système d'exploitation. Dans un seul shell (environnement si identique), si j'exécute 'python2./Script', j'obtiens l'exception et si je lance' python3./Script', je ne le fais pas. –