[Patches] [ python-Patches-725942 ] Modules/addrinfo.h patch
SourceForge.net
noreply@sourceforge.net
Fri, 25 Apr 2003 15:00:56 -0700
Patches item #725942, was opened at 2003-04-22 23:52
Message generated for change (Comment added) made by woodd
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=725942&group_id=5470
Category: Modules
Group: Python 2.2.x
Status: Open
Resolution: None
Priority: 5
Submitted By: David Wood (woodd)
Assigned to: Martin v. Löwis (loewis)
Summary: Modules/addrinfo.h patch
Initial Comment:
I've compiled / linked Python 2.2.2 on Solaris 2.6 for
both of my Solaris releases (Solaris 2.6 & Solaris 8).
Python works fine on Solaris 2.6; however, on Solaris
2.8 I get the following:
File "/usr/local/lib/python2.2/SocketServer.py", line
340, in server_bind
self.socket.bind(self.server_address)
socket.gaierror: (3, 'getaddrinfo failed')
Solaris 2.6 does not have getaddrinfo but Solaris 8
does. The failure occurs on Solaris 8 because Python
finds getaddrinfo in /usr/lib/libsocket.so
before /usr/local/lib/python2.2/lib-dynload/_socket.so.
The return code of 3 (EAI_BADFLAGS) is a result of
ai_flags mismatch:
bsqa1.nyc:/u/woodd > grep 'define.AI_PASSIVE'
Python-2.2.2/Modules/addrinfo.h
#define AI_PASSIVE 0x00000001 /* get address to
use bind() */
bsqa1.nyc:/u/woodd >
grep 'define.AI_PASSIVE' /usr/include/netdb.h
#define AI_PASSIVE 0x0008 /* intended for bind()
+ listen() */
The enclosed patch is simple: always "#define
getaddrinfo fake_getaddrinfo" if we don't have
getaddrinfo. The same applies for getnameinfo. The
enclosed patch is against v2.2.2 Modules/addrinfo.h.
David
----------------------------------------------------------------------
>Comment By: David Wood (woodd)
Date: 2003-04-25 22:00
Message:
Logged In: YES
user_id=62760
> Apparently, Sun cannot deliver what it promises: Here we
> have a piece of software built for Solaris 2.6 which breaks
> on later versions.
Haha - you have me there :-).
> In general, I think Python cannot guarantee that this won't
> happen again: There might always be the need to emulate
> some function not available on a certain operating system
> which then gets added in later releases of the operating
> system, in an incompatible fashion.
I would never ask for a guarantee; however, would it be too
much to ask that well know public interfaces such
as getaddrinfo() be emulated with not so well known internal
names? I wasn't the one who invented fake_getaddrinfo
afterall - look at socketmodule.c (line 230 v2.2.2 MAC OS X).
> I think there is a chance that some of the 300+ packages
> show the same problem, and you just haven't noticed yet.
Unlikely.
> In any case, I'll consider the patch for inclusion after 2.3b1
Thanks. David
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2003-04-25 21:39
Message:
Logged In: YES
user_id=21627
Apparently, Sun cannot deliver what it promises: Here we
have a piece of software built for Solaris 2.6 which breaks
on later versions.
In general, I think Python cannot guarantee that this won't
happen again: There might always be the need to emulate some
function not available on a certain operating system which
then gets added in later releases of the operating system,
in an incompatible fashion.
I cannot even guarantee that this doesn't happen for your
specific installation if the problem at hand is solved, and
I think there is a chance that some of the 300+ packages
show the same problem, and you just haven't noticed yet.
In any case, I'll consider the patch for inclusion after 2.3b1
----------------------------------------------------------------------
Comment By: David Wood (woodd)
Date: 2003-04-25 20:50
Message:
Logged In: YES
user_id=62760
Let me ask a hypothetical (and admittedly facetious)
question - if I had Solaris 2.5.1, 2.6, 7, 8, 9 would I need to
maintain 5 installations of Python? Seriously though, I don't
think it's unreasonable to expect backwards compatibility.
Sun promises to deliver operating systems such that any
piece of code compiled/linked on Solaris 2.6 for example will
run without modification on Solaris 7, 8, 9, etc. If Python is
going to break after Solaris release upgrades I'd rather not
have it on my systems at all.
Of the 300+ packages I have compiled/installed in /usr/local
only 5 (sysinfo, scsiinfo, lsof, etc) require version specific
installations. Notice Perl is not in that list ;-). The version
specific installations are warranted as these packages
operate at a very low level (directly with hardware device
drivers). Python operates at a very high level using fairly
standard library calls; therefore, this really shouldn't be
necessary.
David
----------------------------------------------------------------------
Comment By: Martin v. Löwis (loewis)
Date: 2003-04-25 19:07
Message:
Logged In: YES
user_id=21627
I'm not sure I want to support this. Shouldn't you build two
installations of Python instead?
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=725942&group_id=5470