Problem with sources - socketmodule.c

Jonathan Giddy jon at rdt.monash.edu.au
Tue Aug 31 01:47:42 EDT 1999


pointal at lure.u-psud.fr (Laurent POINTAL) writes:

>Looking after the error, it was a problem of the number of arguments
>for gethost_by_name_r (and for gethotstbyaddr_r). 
>The ./configure has correctly tested my headers, found a 5 arguments
>gethost_by_name_r, and defined HAVE_GETHOSTBYNAME_R5_ARG.

>But in the socketmodule.c, the source begin by undefining the
>preprocessor symbols HAVE_GETHOSTBYNAME_* set by ./configure, and set
>them depending on the platform... and for linux it automatically set
>it to HAVE_GETHOSTBYNAME_R6_ARG. Which is false on the Slackware4
>Linux.

>Currently, I have put a #if !defined(linux) / #endif around the
>socketmodule.c code which modify HAVE_GETHOSTBYNAME_* and all works
>well.

>Note:
>Linux 2.2.6
>libc.so.5.4.46
>egcs 2.91.66
>gcc 2.7.2.3
>netdb.h v1.4 1995/08/14

The configure tests are not used because they don't work with non-ANSI 
compilers, which are still the default compilers on some platforms.

This sounds like a libc5 vs. glibc problem, but I can't find any details.
If it is, the solution is to add further tests involving the preprocessor 
defines linux and __GLIBC__, as below.  But maybe someone can confirm my
hypothesis first.

e.g.
#ifdef HAVE_GETHOSTBYNAME_R
#if defined(_AIX) || defined(__osf__)
#define HAVE_GETHOSTBYNAME_R_3_ARG
#elif defined(linux) && defined(__GLIBC__)
#define HAVE_GETHOSTBYNAME_R_6_ARG
#elif defined(__sun__) || defined(__sgi) || defined(linux)
#define HAVE_GETHOSTBYNAME_R_5_ARG
#else
#undef HAVE_GETHOSTBYNAME_R
#endif
#endif





More information about the Python-list mailing list