专门为难C高手,gethostbyname函数出错问题!!!
软件平台 solaris 10
部分代码:
typedef unsigned long int my_u_long_int;
unsigned short int u_short_intHttpPort;
my_u_long_int u_long_ip;
char charhostname[256],charHttpPort[6];
struct hostent *hostent_pointer=NULL;
if ((hostent_pointer = gethostbyname(charhostname)) == NULL) /* 提取域名并转协议地址 */
{
herror("CONNECT gethostbyname error :: ");
return 2; /* 返回2表示域名解析错误 */
}
PrintLog(stderr,"gethostbyname okokok !!!");
u_long_ip=*((my_u_long_int*)hostent_pointer->h_addr_list[0]);
u_short_intHttpPort=strtol(charHttpPort,NULL,10);
该程序做成并发程序没有问题,但是放在线程中运行
则总是在运行到PrintLog(stderr,"gethostbyname okokok !!!");语句之前偶尔会core
用gdb调式跟踪内容如下:
Program terminated with signal 10, Bus error.
#0 0xff229c64 in __inet_address_is_local_af () from /usr/lib/libnsl.so.1
(gdb) where
#0 0xff229c64 in __inet_address_is_local_af () from /usr/lib/libnsl.so.1
#1 0xff2286f4 in order_haddrlist_inet () from /usr/lib/libnsl.so.1
#2 0xff227de0 in _switch_gethostbyname_r () from /usr/lib/libnsl.so.1
#3 0xff226a98 in _get_hostserv_inetnetdir_byname () from /usr/lib/libnsl.so.1
#4 0xff2232e8 in gethostbyname_r () from /usr/lib/libnsl.so.1
#5 0x0001209c in MyHttpConnect ()
#6 0x00011458 in MyHTTP_thread (LocalSock=0x15) at MyHttpThreadProxy.c:12
#7 0xff1c5800 in _lwp_start () from /usr/lib/libc.so.1
#8 0xff1c5800 in _lwp_start () from /usr/lib/libc.so.1
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)
请高手指点问题出在那里? 难道函数gethostbyname()有问题,或者库函数libnsl.so.1 有问题?
而且charhostname和chaHttpPort肯定非空