谨慎使用LINUX平台的gethostbynamer函数
(2012-04-13 06:28:55)
标签:
linux
杂谈
谨慎使用LINUX平台的gethostbyname_r函数编译运行下面的代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
unsigned int get_ip4(char *host)
{
//临时变量
char dns_buff;
struct hostent hostinfo, *phost;
struct sockaddr_in addr4;
int i, flag, rc;
time_t now;
unsigned int ip4;
//尝试直接转换
bzero(&addr4, sizeof(struct sockaddr_in));
if (1 == inet_pton(AF_INET, host,
&(addr4.sin_addr)))
return(addr4.sin_addr.s_addr);
//查询DNS
if (0 == gethostbyname_r(host, &hostinfo, dns_buff,
8192, &phost, &rc)) {
ip4 = *(unsigned int *)(hostinfo.h_addr);//新记录
} else {
ip4 = 0;//查询失败
}
return(ip4);
}
int main(int argchttp://www.faminorson.com, char *argv[])
{
unsigned int ip4 = 0;
ip4 =
get_ip4("192.1468.80.38");
return(0);
}
在freeBSD运行不会段错误, 在CentOS 4上就会段错误
现在我只好重新实现类似函数了
其它LINUX/UNIX平台的帮我实验下, 我想确定是LINUX还是仅仅是RHEL的问题
谢谢了
[ 本帖最后由 safedead 于 2007-8-31 17:25 编辑 ]关于gethostbyname_r的返回值
man手册是这么说的
struct hostent *gethostbyname2(const char *name, int af);
int gethostbyname_r (const char *name,
struct hostent *ret, char *buf, size_t buflen,
struct hostent **result, int *h_errnop);
int gethostbyname2_
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。