想在现有代码的基础上将支持Ipv6,INADDR_ANY如何转换为Ipv6
这样写应该可以:
struct sockaddr_in6 sa; struct in6_addr any_addr = IN6ADDR_ANY_INIT; sa.sin6_addr = any_addr;
非常感谢你
刚才试了一下"::"表示IPv6的任意地址,你写的没有问题
分常感谢!!
昨天已经用了涵数inet_ptoninet_pton(AF_INET6,"::",&(caddr.sin6_addr.s6_addr));也编译过了,不知道是否有什么地方没有注意到,请帮忙!
s6_addr是个数组,没法用htonl来转换我的部分相关代码: struct sockaddr_in6 addr6; //IPv6地址结构 socklen_t addrlen; //地址信息长度 int rc;
//初始化结构 addrlen = sizeof(struct sockaddr_in6); bzero(&addr6, addrlen);
//地址翻译 rc = inet_pton(AF_INET6, ip6_addr, &(addr6.sin6_addr));//ip6_addr是字符串指针,作为函数参数传进来的 if (0 >= rc) return(-1); addr6.sin6_family = AF_INET6; addr6.sin6_port = htons(server_port);
谢谢您的回复,现将代码附上(之前是在宿舍,没记住代码):
之前(IPv4)的代码:
caddr.sin_family = AF_INET; caddr.sin_addr.s_addr = htonl(INADDR_ANY); caddr.sin_port = htons(0);改后(IPv6)的代码: caddr.sin6_family = AF_INET6; caddr.sin6_addr.s6_addr = htonl(INADDR_ANY); caddr.sin6_port = htons(0);
我搜索了INADDR_ANY的定义:/* Address to accept any incoming messages. */#define INADDR_ANY ((in_addr_t) 0x00000000)
in_addr_t的定义如下:
/* Internet address. */typedef uint32_t in_addr_t;
而uint32_t 的定义如下:typedef unsigned int uint32_t;
请问在IPv6里如何修改"INADDR_ANY", 因为htonl这个涵数是将16进制转换为网络地址(应该是IPv4地址),是否要换个涵数来支持IPv6?
[ 本帖最后由 sophia99 于 2006-7-10 16:10 编辑 ]
INADDR_ANY在IPv4是个整数在IPv6是个结构
lo用"::1"(这个我确定)任意地址应该是":::"(我没有试验)
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(7)
这样写应该可以:
struct sockaddr_in6 sa;
struct in6_addr any_addr = IN6ADDR_ANY_INIT;
sa.sin6_addr = any_addr;
非常感谢你
刚才试了一下
"::"表示IPv6的任意地址,
你写的没有问题
分常感谢!!
昨天已经用了涵数inet_pton
inet_pton(AF_INET6,"::",&(caddr.sin6_addr.s6_addr));
也编译过了,不知道是否有什么地方没有注意到,请帮忙!
s6_addr是个数组,没法用htonl来转换
我的部分相关代码:
struct sockaddr_in6 addr6; //IPv6地址结构
socklen_t addrlen; //地址信息长度
int rc;
//初始化结构
addrlen = sizeof(struct sockaddr_in6);
bzero(&addr6, addrlen);
//地址翻译
rc = inet_pton(AF_INET6, ip6_addr, &(addr6.sin6_addr));//ip6_addr是字符串指针,作为函数参数传进来的
if (0 >= rc) return(-1);
addr6.sin6_family = AF_INET6;
addr6.sin6_port = htons(server_port);
谢谢您的回复,现将代码附上(之前是在宿舍,没记住代码):
之前(IPv4)的代码:
caddr.sin_family = AF_INET;
caddr.sin_addr.s_addr = htonl(INADDR_ANY);
caddr.sin_port = htons(0);
改后(IPv6)的代码:
caddr.sin6_family = AF_INET6;
caddr.sin6_addr.s6_addr = htonl(INADDR_ANY);
caddr.sin6_port = htons(0);
我搜索了INADDR_ANY的定义:
/* Address to accept any incoming messages. */
#define INADDR_ANY ((in_addr_t) 0x00000000)
in_addr_t的定义如下:
/* Internet address. */
typedef uint32_t in_addr_t;
而uint32_t 的定义如下:
typedef unsigned int uint32_t;
请问在IPv6里如何修改"INADDR_ANY", 因为htonl这个涵数是将16进制转换为网络地址(应该是IPv4地址),是否要换个涵数来支持IPv6?
[ 本帖最后由 sophia99 于 2006-7-10 16:10 编辑 ]
INADDR_ANY在IPv4是个整数
在IPv6是个结构
lo用"::1"(这个我确定)
任意地址应该是":::"(我没有试验)