This is just a post for the record for myself since I didnt fully understand every part of the issue and most recent computers all have IPv6 enabled.
Just a day or two ago, I upgraded Google App Engine to 1.7.7 from 1.7.6 and it threw this error:
~/p/yjl.im [hg:default] $ make run google_appengine/dev_appserver.py --enable_sendmail yes src Traceback (most recent call last): File "google_appengine/dev_appserver.py", line 193, in <module> _run_file(__file__, globals()) File "google_appengine/dev_appserver.py", line 189, in _run_file execfile(script_path, globals_) File "/home/livibetter/p/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 662, in <module> main() File "/home/livibetter/p/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 655, in main dev_server.start(options) File "/home/livibetter/p/google_appengine/google/appengine/tools/devappserver2/devappserver2.py", line 626, in start apis.start() File "/home/livibetter/p/google_appengine/google/appengine/tools/devappserver2/api_server.py", line 151, in start super(APIServer, self).start() File "/home/livibetter/p/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 289, in start server.start() File "/home/livibetter/p/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 190, in start socket.SOCK_STREAM, 0, socket.AI_PASSIVE) TypeError: getaddrinfo() argument 1 must be string or None Exception in thread Thread-4 (most likely raised during interpreter shutdown): Traceback (most recent call last): make: *** [run] Error 1
At first, I thought maybe some system updates interferred, so I checked logs, Python was untoched nor any system packages. There was no installs or uninstalls. I searched for issues, documentations, discussions, Stack Overflow, not a single entry posted after the release of 1.7.7 having the same error message I got.
Finally, I printed out the host and port to see whats going on, they had some unusual values:
10 '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
If compared with the following code:
socket.getaddrinfo('localhost', 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE) [(2, 1, 6, '', ('127.0.0.1', 0)), (10, 1, 6, '', (10, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'))]
You can see where the values came from. According to Python socket:
[] (results may differ on your system if IPv6 isnt enabled):
and getaddrinfo(3):
[] and no matching IPv6 addresses could be found, then return IPv4-mapped IPv6 addresses in the list pointed to by res. []
I think that 14 bytes of all 0s might have something to do with IPv4-mapped IPv6 address since I dont have IPv6 enabled. I feel the values of Pythons socket.getaddinfo look like an erroneous result.
At this moment, just a quick workaround, I replaced AF_UNSPEC with AF_INET in line 276 for IPv4 only. I think this sort of counts as a bug, but I am not sure if it is worth to report and to be patched.
This could be a sign that its time for me to migrate to IPv6, I now have added ipv6 USE flag added in make.conf. I will let packages slowly being built with IPv6 support.