QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1364|回复: 3

如何调用c函数获得IPV6地址?

[复制链接]
发表于 2006-3-11 23:42:08 | 显示全部楼层 |阅读模式
在linux设置了IPV6地址,该调用c的哪个库和哪个函数才能得到本机的IPV6地址?
谢谢....
发表于 2006-3-12 10:46:19 | 显示全部楼层
以下的代码是从commoncpp中抽出的, 应该有一点参照价值。
[code:1]
void IPV6Address::setAddress(const char *host)
{       
        if(hostname)
                delString(hostname);
        hostname = NULL;

        if(!host)  // The way this is currently used, this can never happen
                host = "::";

#ifdef        WIN32
        if(!stricmp(host, "localhost"))
                host = "::1";
#endif

        if(!setIPAddress(host))
        {
                struct addrinfo hint, *list = NULL, *first;
                memset(&hint, 0, sizeof(hint));
                hint.ai_family = AF_INET6;
                struct in6_addr *addr;
                struct sockaddr_in6 *ip6addr;

                if(getaddrinfo(host, NULL, &hint, &list) || !list)
                {
                        if(ipaddr)
                                delete[] ipaddr;
                        ipaddr = new struct in6_addr[1];
                        memset((void *)&ipaddr[0], 0, sizeof(ipaddr));
                        return;
                }
               
                // Count the number of IP addresses returned
                addr_count = 0;
                first = list;
                while(list)
                {
                        ++addr_count;
                        list = list->ai_next;
                }

                // Allocate enough memory
                if(ipaddr)
                        delete[] ipaddr;        // Cause this was allocated in base
                ipaddr = new struct in6_addr[addr_count];

                // Now go through the list again assigning to
                // the member ipaddr;
                list = first;
                int i = 0;
                while(list)
                {
                        ip6addr = (struct sockaddr_in6 *)list->ai_addr;
                        addr = &ip6addr->sin6_addr;
                        if(validator)
                                (*validator)(*addr);
                        ipaddr[i++] = *addr;
                        list = list->ai_next;
                }
                freeaddrinfo(first);
        }
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2006-3-12 22:40:18 | 显示全部楼层
谢谢....
但是,我们的project必须要求在C中实现,不可以调用C++,请问C中该调用什么函数?
回复

使用道具 举报

发表于 2006-3-15 21:40:19 | 显示全部楼层
上面的代码改成c的实在很简单吧。。。。。。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 20:16 , Processed in 0.054368 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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