Nick Coghlan <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] wrote: > > Marc, it is possible that there was a change between > > glibc-2.2.4 and 2.2.5 that would account for the > > difference in behaviour. I think i'll write a little > > test program in C to check out getservbyname's return > > values in a little more controled environment. I'll > > post the results tomorrow.
> The other question is which C library Python is actually > using on your system. > Maybe it's picking up whatever installed the funky man page > which doesn't > mention NULL proto arguments. > So, find your Python 2.4 binary and run "ldd python24" to > see which shared C > library it is linking to. > For me, it's /lib/tls/libc.so.6. Running that library directly > prints out the > message about GNU C library 2.3.3. hey Nick, The man pages are probably from orignal system installation so i used your ldd technique which says that the python executable was compiled against glibc-2.2.5. I'm going to check the diff for 2.2.4-2.2.5 and look for anything getservbyname related. Below i'm including the source code for a little program to exercise getservbyname. On this system if 'NULL' is passed as the protocal then 'NULL' is returned. I wonder if writing some code around the call to getservbyname in Modules/socketmodule.c to test for a call with the NULL argument would be appropriate. Could you show the output from my included program when NULL is passed as an argument? Probably would be good to know what the call returns on your system before trying to get mine to mimic it. Ok, back to grep'ing. pete jordan x2164 mailcity com /* * This program just test what happens when getservbyname * is passed a NULL pointer argument for the name and proto * paramenters. * * The compilation line i used: * * gcc getserv.c -o getserv * * and just type 'getserv' at a prompt. * * Just pass 'service name, protocol name' to * 'get_print' to check if combination is found. */ #include <stdio.h> #include <netdb.h> #include <netinet/in.h> void get_print( const char *, const char * ); int main() { get_print( "daytime", "tcp" ); get_print( "daytime", "udp" ); get_print( "daytime", NULL ); get_print( NULL, "tcp" ); get_print( NULL, NULL ); get_print( "ithkl", "tcp" ); get_print( "echo", "ddp" ); return ; } void get_print( const char *name, const char *proto ) { struct servent *result = NULL ; result = getservbyname( name, proto ); printf( "\n getservbyname call: getservbyname( %s , %s ) \n", name, proto ); printf(" getservbyname returned:\n"); if ( result == NULL ) printf("\t\t\t NULL - end of 'services' file reached or\n" "\t\t\t error occured.\n\n"); else { printf( "\t\t\t s_name = %s \n", result->s_name ); printf( "\t\t\t s_port = %d \n", ntohs(result->s_port) ); printf( "\t\t\t s_proto = %s \n", result->s_proto ); printf( "\n" ); } } -- http://mail.python.org/mailman/listinfo/python-list