New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Python socket library confused by IPV6 notation in /etc/host #44282
Comments
Robert J.Berger <rberger@ibd.com> reported this on the gpsd-dev mailing list of the GPSD project. "Until I changed the line in /etc/hosts from: ::1 localhost.localdomain localhost to: 127.0.0.1 localhost.localdomain localhost the gps.py [library distributed by the GPSD project] would fail when trying to open the socket connection to gpsd: File "/usr/local/bin/spGps.py", line 198, in __init__ This is with Python 2.4.4 under Red Hat Linux, kernel version not reported. Robert believes, and I concur, that this is not a GPSD bug. Rather, something lower-level -- possibly the Python socket library, possibly some C library it uses -- is having indigestion on the IPV6 notation. |
Berger reports the kernel is 2.6.18. Fedora Core 6. |
Can you please report the values of "host" and "port" when that error is raised? |
host is 'localhost' What's going on here is that gps.py is a Python client module for a local daemon that monitors GPS devices on the host's serial and USB ports and presents output on port 2947. While it is possible to use gps.py to monitor a remote host, Berger wasn't doing that. The socket module threw an error while attempting to connect to localhost. |
This seems to work fine for me: >>> s = socket.socket(socket.AF_INET6)
>>> s.bind(('ip6-localhost', 8091))
>>> s.getsockname()
('::1', 8091, 0, 0)
>>> exarkun@charm: Are you sure this isn't a local misconfiguration? Perhaps gpsd isn't listening on ::1, only 127.1? |
I'm not. I didn't see it happen. I suggest you email Mr. Berger and ask him. |
I will try to get a simple example that reproduces it. Unfortunately I don't have access to the system that was doing it today. I will try to get something in the bug report in the next day or so. But basically if /etc/hosts had localhost defined as ::1 the connect method failded, when I set localhost to 127.0.0.1 the connect worked. Other non-python (c++) processes were able to access the socket when localhost was set to ::1 This was on Fedora Core 6 with the latest patches at that time. |
I believe this is a local configuration error, and possibly a C library error. I'll attach two programs: g.c does what I believe gpsd does, and c.py This works fine on my system after I change localhost to be ::1 in /etc/hosts, If C programs work on the machine, it may be because they use gethostbyname, Closing as "works for me". |
File Added: c.py |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: