LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 998|回复: 2

问一个有关getaddrinfo的问题

[复制链接]
发表于 2007-8-11 13:48:46 | 显示全部楼层 |阅读模式
程序的目的是找到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;
  hints.ai_flags=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和空主机名

请高手指点。
 楼主| 发表于 2007-8-15 09:33:52 | 显示全部楼层
无奈的顶一下
回复 支持 反对

使用道具 举报

发表于 2007-8-18 20:16:20 | 显示全部楼层
inet_ntop(int af, const void *src,char *dst, size_t cnt)函数中src是指向struct in_addr类型的,而不是struct sockaddr,所以应改成
do{
printf("ip: %s,host: %s\n",inet_ntop(AF_INET,&((struct sockaddr_in *)addr->ai_addr)->sin_addr,ipbuf,sizeof(ipbuf)),addr->ai_canonname);
}while((addr=addr->ai_next)!=NULL); //打印找到的主机地址和主机名
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表