IOS 客户端 socket IPV4兼容IPV6
来源:互联网 发布:什么是淘宝客单价 编辑:程序博客网 时间:2024/05/16 03:00
前些天提交代码,被苹果打回了,苹果回复:Specifically, we were unable to access the app. We've attached screenshot for your reference. Apps are reviewed on an IPv6 network. Please ensure that your app supports IPv6 networks, as IPv6 compatibility is required才发现从2016-6-1起,所有提交APPStore的应用必须要支持IPV6网络。
struct addrinfo *result;
struct addrinfo *res;
struct addrinfo addrCriteria;
memset(&addrCriteria,0,sizeof(addrCriteria));
addrCriteria.ai_family=AF_UNSPEC;
addrCriteria.ai_socktype=SOCK_STREAM;
addrCriteria.ai_protocol=IPPROTO_TCP;
//判定网络类型 指定特定接口信息
int error = getaddrinfo("www.baidu.com", "1100", &addrCriteria, &result);
if (error == 0)
{
struct sockaddr_in *sa;
for (res = result; res != NULL; res = res->ai_next)
{
if (AF_INET6 == res->ai_addr->sa_family)
{
char buf[128] = {};
sa = (struct sockaddr_in*)res->ai_addr;
inet_ntop(AF_INET6, &((reinterpret_cast<struct sockaddr_in6*>(sa))->sin6_addr), buf, 128);
m_sock = socket(res->ai_family, res->ai_socktype, 0);
if (m_sock == -1) {
log("error socket create");
return;
}
struct sockaddr_in6 svraddr;
memset(&svraddr, 0, sizeof(svraddr)); //注意初始化
svraddr.sin6_family = AF_INET6;
svraddr.sin6_port = htons(port);
if (inet_pton(AF_INET6,buf,&svraddr.sin6_addr) < 0)
{
log("error addr");
}
int ret = connect(m_sock, (struct sockaddr*) &svraddr, sizeof(svraddr));
//TODO....遇到IPv6就退出
break;
}
else if (AF_INET == res->ai_addr->sa_family)
{
char buf[32] = {};
sa = (struct sockaddr_in*)res->ai_addr;
inet_ntop(AF_INET, &sa->sin_addr), buf, 32);
m_sock = socket(res->ai_family, res->ai_socktype, 0);
if (m_sock == -1) {
log("error socket create");
return;
}
struct sockaddr_in svraddr;
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = inet_addr(buf);
svraddr.sin_port = htons(port);
int ret = connect(m_sock, (struct sockaddr*) &svraddr, sizeof(svraddr));
//TODO.... break除掉
//break;
}
}
}
参考:http://blog.csdn.net/msdb198901/article/details/51654852
- IOS 客户端 socket IPV4兼容IPV6
- IOS socket 兼容IPV4与IPV6
- 客户端底层 Socket 实现IPV4 IPV6网络环境的兼容
- iOS——socket适配ipv6,同时兼容ipv4
- socket连接库,兼容ipv6,ipv4,为IOS上架做准备
- socket兼容IPV4、IPV6网络底层connect写法
- IOS设备兼容Ipv5/ipv6访问Ipv4服务器
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- IPv6为啥无法兼容IPv4?
- Socket如何兼容IPV6
- iOS ipv4和ipv6转换
- C++ IPv4与IPv6的兼容编码
- C++ IPv4与IPv6的兼容编码
- C++ IPv4与IPv6的兼容编码
- ipv4 ipv6 socket 编程相关结构
- 关于 ipv4 ipv6 socket 编程 wiki
- ipv6 ipv4的socket编码的区别
- Linux命令之dos2unix - 将DOS格式文本文件转换成UNIX格式
- 数组、指针数组与数组指针
- 设计模式——状态模式
- js中的delete运算符
- 布局出问题?边框大法好!
- IOS 客户端 socket IPV4兼容IPV6
- hdu 1548 A strange lift
- Spring入门
- OSGI中ServiceTracker的应用
- 红与黑HNCU1103
- 9. PHP 绘制线段与圆弧 imageline、imagesetstyle 与 imagearc 函数
- unity3d接入支付宝 iOS篇(二)
- SQLServer控制用户访问权限表
- iOS 继承&类方法