天下

记录修行的印记

getaddrinfo函数

#include <stdio.h>
#include 
<stdlib.h>
#include 
<string.h>
#include 
<vector>

#ifdef WIN32
    #include 
<WinSock2.h>
    #include 
<ws2tcpip.h>
    #pragma comment(lib,
"Ws2_32.lib")
    
//end WIN32
#else //Linux
    #include 
<unistd.h>
    #include 
<sys/socket.h>
    #include 
<netinet/in.h>
    #include 
<arpa/inet.h>
    #include 
<netdb.h>
#endif //end Linux

typedef std::vector
<struct in_addr> array_in_addr;
int GetHostsByName( const char *host_name,array_in_addr* pArrayaddr)
{
    
int n=0;
    
struct addrinfo hints,*res;
    
struct addrinfo* p_addrinfo = NULL;

    memset( 
&hints,0,sizeof(struct addrinfo) );
    hints.ai_flags 
= AI_CANONNAME;   //客户端一般就用这个 AI_CANONNAME,服务端建议用:AI_PASSIVE 
    hints.ai_family = AF_INET;        //AF_INET:IPv4 ,AF_INET6:IPv6

    hints.ai_socktype 
= SOCK_STREAM; //IPPROTO_IP 可能会产生多个重复IP
    sockaddr_in* p_sockaddr_in;
    
if( (n = getaddrinfo( host_name,NULL, &hints, &res) ) != 0)
       
return 0;
    
    printf(
"domain:%s \r\n",host_name);
    p_addrinfo 
= res;
    
while(p_addrinfo!=NULL)
    {
        pArrayaddr
->push_back( ((sockaddr_in*)p_addrinfo->ai_addr)->sin_addr);
        printf(
"ip%d: %s \r\n",pArrayaddr->size(),inet_ntoa(((sockaddr_in*)p_addrinfo->ai_addr)->sin_addr));
        p_addrinfo 
= p_addrinfo->ai_next;
    }
    freeaddrinfo(res);
    
return pArrayaddr->size();    
}



int main(int argc, char *argv[])
{
    
int nRet;
    
const char* pszHost = NULL;
    array_in_addr inaddrs;
    
if (argc != 2) {
        printf(
"Usage:%s <hostname> \r\n",argv[0]);
        
return -1;
    }
    pszHost 
= argv[1];

#ifdef WIN32
    WSADATA wsaData;
    
int err = WSAStartup( 0x0202&wsaData );
    
if ( err != 0 )  {
        printf(
"socket init(WSAStartup) failure \r\n");
        
return 1;
    }
#endif
    GetHostsByName(pszHost,
&inaddrs);

#ifdef WIN32
    WSACleanup();
#endif
    
return 0;
}

参见网址:

http://baike.baidu.com/view/6757218.htm

posted on 2012-05-15 16:57 天下 阅读(653) 评论(0)  编辑 收藏 引用 所属分类: Socket


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2016年1月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(3)

随笔分类(369)

随笔档案(320)

链接

最新随笔

搜索

最新评论