问一个有关getaddrinfo的问题
程序的目的是找到gets输入的主机 并打印主机名和ip ,程序通过编译运行。
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <signal.h>
#include <time.h>
int main(void){
int rc;
char name[20]; //得到的主机名
char ipbuf[16]; // 保存ip地址
struct addrinfo hints,*addr;
memset(&hints,0,sizeof(struct addrinfo));
hints.ai_family=AF_INET;
hints.ai_flags=AI_CANONNAME | AI_ADDRCONFIG;
gets(name); //从输入得要查找的主机名
if((rc=getaddrinfo(name,NULL,&hints,&addr))==0){
do{
printf("ip: %s,host: %s\n",inet_ntop(AF_INET,addr->ai_addr,ipbuf,sizeof(ipbuf)),addr->ai_canonname);
}while((addr=addr->ai_next)!=NULL); //打印找到的主机地址和主机名
return 0;
}
printf("%d\n",rc);//检查出错时的rc值
return 0;
}
程序的问题是 不管输入的主机是非存在 都无法找到主机 返回2.0.0.0 的ip和空主机名
是不是inet_ntop用错了?请高手指点。
相关推荐
VUE Error: getaddrinfo ENOTFOUND localhost
主要介绍了VUE Error: getaddrinfo ENOTFOUND localhost,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
解决无网络环境下getaddrinfo引发的超时问题
问题背景: 源码中在调用getaddrinfo时,如果是网络正常的环境下,getaddrinfo返回会很快,但如果无网络,机器就无法进行dns解析,从而导致getaddrinfo返回时间高达1-2分钟以上。 解决方案:使用多线程执行getaddrinfo 源码如下: //add by xdl struct stu_dns_info { LPCSTR node; LPCSTR servname; struct addrinfo *hints; struct add
解决 socket.gaierror: [Errno 11001] getaddrinfo failed
因为在做一些网页数据集的处理,需要解析域名,整理Ip,故用到了, Socket.getaddrinfo, 首先是从之前处理好的域名数据集中读取域名 其次循环挨个处理 做好异常处理 但是结果显然不尽如人意,但是当你手动将单个域名,放进去解析,是没有问题的。 然后我就蒙了,后来经过一圈的查阅资源,试了挺多的手段,后来看到这样的一段话 I think the problem is a newline at the end of server_name. 也就是说在我读取的每一行的域名后面是有一个换行符的。 接下来 就是去掉它 ‘\n’ like is 解释一下,这里去掉换行符的方式有两种: 用
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
主要介绍了PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法,需要的朋友可以参考下
getaddrinfo.c 内部代码
getaddrinfo.c 内部代码 getaddrinfo.c 内部代码 getaddrinfo.c 内部代码 getaddrinfo.c 内部代码



