[ python-Bugs-1603527 ] Python socket library confused by IPV6 notation in /etc/host

SourceForge.net noreply at sourceforge.net
Mon Dec 18 11:12:58 CET 2006


Bugs item #1603527, was opened at 2006-11-27 06:43
Message generated for change (Comment added) made by loewis
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1603527&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Library
Group: Python 2.4
>Status: Closed
>Resolution: Works For Me
Priority: 5
Private: No
Submitted By: Eric S. Raymond (esr)
Assigned to: Nobody/Anonymous (nobody)
Summary: Python socket library confused by IPV6 notation in /etc/host

Initial Comment:
Robert J.Berger <rberger at 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__
     self.connect(host, port)
   File "/usr/local/bin/spGps.py", line 237, in connect
     raise socket.error, msg
socket.error: (111, 'Connection refused')

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.


----------------------------------------------------------------------

>Comment By: Martin v. Löwis (loewis)
Date: 2006-12-18 11:12

Message:
Logged In: YES 
user_id=21627
Originator: NO

File Added: c.py

----------------------------------------------------------------------

Comment By: Martin v. Löwis (loewis)
Date: 2006-12-18 11:12

Message:
Logged In: YES 
user_id=21627
Originator: NO

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 
does what I believe spGps.py does.

This works fine on my system after I change localhost to be ::1 in
/etc/hosts,
even though g.c only listens on IPv4 interfaces. On my system, it "works"
because
libc (getaddrinfo) then goes to DNS, and my DNS server has an entry for
localhost.

If C programs work on the machine, it may be because they use
gethostbyname,
not getaddrinfo.

Closing as "works for me".
File Added: g.c

----------------------------------------------------------------------

Comment By: Robert J. Berger (rjbsourceforge)
Date: 2006-12-03 21:15

Message:
Logged In: YES 
user_id=29744
Originator: NO

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.


----------------------------------------------------------------------

Comment By: Eric S. Raymond (esr)
Date: 2006-12-01 23:18

Message:
Logged In: YES 
user_id=3060
Originator: YES

>Are you sure this isn't a local misconfiguration?

I'm not.  I didn't see it happen. I suggest you email Mr. Berger and ask
him.


----------------------------------------------------------------------

Comment By: Jp Calderone (kuran)
Date: 2006-12-01 22:10

Message:
Logged In: YES 
user_id=366566
Originator: NO

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 at charm:~$ grep ip6-localhost /etc/hosts
::1 ip6-localhost ip6-loopback
exarkun at charm:~$ 

Are you sure this isn't a local misconfiguration?  Perhaps gpsd isn't
listening on ::1, only 127.1?


----------------------------------------------------------------------

Comment By: Eric S. Raymond (esr)
Date: 2006-11-29 22:35

Message:
Logged In: YES 
user_id=3060
Originator: YES

host is 'localhost'
port is 2947

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.




----------------------------------------------------------------------

Comment By: Martin v. Löwis (loewis)
Date: 2006-11-29 22:18

Message:
Logged In: YES 
user_id=21627
Originator: NO

Can you please report the values of "host" and "port" when that error is
raised?

----------------------------------------------------------------------

Comment By: Eric S. Raymond (esr)
Date: 2006-11-27 07:03

Message:
Logged In: YES 
user_id=3060
Originator: YES

Berger reports the kernel is 2.6.18.  Fedora Core 6.


----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1603527&group_id=5470


More information about the Python-bugs-list mailing list