| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4722 人关注过本帖
标题:getaddrinfo() 一小例
取消只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏
 问题点数:0 回复次数:0 
getaddrinfo() 一小例
告别gethostbyname等函数,学习使用getaddrinfo(),与时俱进

程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int lookup_host(const char *host) {

    struct addrinfo hints, *res;
    int errcode;
    char addrstr[100];
    void *ptr;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags |= AI_CANONNAME;

    errcode = getaddrinfo(host, NULL, &hints, &res);
    if(errcode != 0) {
        perror("getaddrinfo");
        return -1;
    }

    printf("Host: %s\n", host);

    while(res) {
        inet_ntop(res->ai_family, res->ai_addr->sa_data, addrstr, 100);
        switch(res->ai_family) {
            case AF_INET:
                ptr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;
                break;
            case AF_INET6:
                ptr = &((struct sockaddr_in6*)res->ai_addr)->sin6_addr;
                break;
        }

        inet_ntop(res->ai_family, ptr, addrstr, 100);
        printf("IPv%d address: %s (%s)\n", res->ai_family == AF_INET6? 6: 4, addrstr, res->ai_canonname);
        res = res->ai_next;
    }
    return 0;
}

int main(int argc, char *argv[]) {
    if(argc < 2) 
        exit(1);
    return lookup_host(argv[1]);
}
搜索更多相关主题的帖子: void 学习 include 
2012-08-23 08:26
快速回复:getaddrinfo() 一小例
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023069 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved