socket支持ipv6
转自:https://www.jianshu.com/p/9926b99a7fef
以前cocos2d-x的项目里都使用的是libwebsocket,如果想支持ipv6,只需要升级相应的库即可,现在有个项目里使用的是原生socket,如果要支持ipv6可能需要进行一些代码的改造,具体可参考如下代码:
struct addrinfo *result;
struct addrinfo *res; struct addrinfo addrCriteria;
memset(&addrCriteria,,sizeof(addrCriteria));
addrCriteria.ai_family=AF_UNSPEC;
addrCriteria.ai_socktype=SOCK_STREAM;
addrCriteria.ai_protocol=IPPROTO_TCP; //判定网络类型 指定特定接口信息
int error = getaddrinfo("www.baidu.com", "", &addrCriteria, &result);
if (error == )
{
struct sockaddr_in *sa;
for (res = result; res != NULL; res = res->ai_next)
{
if (AF_INET6 == res->ai_addr->sa_family)
{
char buf[] = {};
sa = (struct sockaddr_in*)res->ai_addr;
inet_ntop(AF_INET6, &((reinterpret_cast<struct sockaddr_in6*>(sa))->sin6_addr), buf, ); m_sock = socket(res->ai_family, res->ai_socktype, );
if (m_sock == -) {
log("error socket create");
return;
} struct sockaddr_in6 svraddr;
memset(&svraddr, , sizeof(svraddr)); //注意初始化
svraddr.sin6_family = AF_INET6;
svraddr.sin6_port = htons(port);
if (inet_pton(AF_INET6,buf,&svraddr.sin6_addr) < )
{
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[] = {};
sa = (struct sockaddr_in*)res->ai_addr;
inet_ntop(AF_INET, &sa->sin_addr), buf, ); m_sock = socket(res->ai_family, res->ai_socktype, );
if (m_sock == -) {
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;
}
}
}
socket支持ipv6的更多相关文章
- iOS 支持 IPv6
苹果的规定:2016年6月1日提交到App Store必须支持IPv6-only网络. 官方文档:https://developer.apple.com/library/mac/documentati ...
- iOS应用支持IPV6,就那点事儿
原文连接 果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...
- iOS应用支持IPV6
一.IPV6-Only支持是啥? 首先IPV6,是对IPV4地址空间的扩充.目前当我们用iOS设备连接上Wifi.4G.3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IP ...
- HP-Socket v5.0.1:支持 IPv6 及多 SSL 证书
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 让你的mysql或mariadb 支持ipv6
如果你在windows 或Linux系统已经安装了mysql/mariadb,并且操作系统本身已经支持了ipv6. 在/etc/my.conf 这样配置可以让mysql也支持ipv6 [mysqld] ...
- linux centos6.5支持ipv6
1.用ifconfig查看有没有inet6 addr,我的这个已经支持了,如果不支持请看第二步. 2.vim /etc/sysconfig/network 把这句改成:NETWORKING_IPV6= ...
- 用尽洪荒之力解决Apple Store ipv6审核通关---linux服务器支持ipv6
强势的库克时代到来,苹果开启了强制IPV6审核,大家也知道中国现在的情况,除了教育网实验性的支持IPV6,ISP运营商还不支持,想必大家都陆陆续续的遭受到了苹果无情的拒绝,以前开个加急,审核 ...
- iOS 上线因iPv6被拒,查询服务器是否支持iPv6,mac设置iPv6网络,手机测试iPv6
一. iOS----如何检查域名是否支持ipv6 iOS----------如何检查域名是否支持ipv6 1.检查你所用到的库,像af 3.0以上什么的(不用改),其他的库自己去搜下是否支持ipv6吧 ...
- iOS----------如何检查域名是否支持ipv6
http://ipv6-test.com/validate.php 这个地址 也可以检测到! 1.检查你所用到的库,像af 3.0以上什么的(不用改),其他的库自己去搜下是否支持ipv6吧. 2. ...
随机推荐
- 微信小程序~跳页传参
[1]需求: 点击商品,跳到相应商品详情页面 [2]代码: (1)商品列表页 <view class="goodsList"> <view wx:for=&quo ...
- c++的boost库
c++ 的boost库的理解? 参考:http://zh.highscore.de/cpp/boost/introduction.html https://www.cnblogs.com/lidabo ...
- Dict.Count
static void Main(string[] args) { Dictionary<string, string> paraNameValueDict = new Dictionar ...
- Vue.js not detected
安装vue devtools工具,在chrome中一直是灰色,title是Vue.js not detected ① F12关闭开发者模式 ② 刷新 ③ 然后再按F12就好了 网上看到的,居然真的有用 ...
- Comet OJ - Contest #14 转转的数据结构题 珂朵莉树+树状数组
题目链接: 题意:有两个操作 操作1:给出n个操作,将区间为l到r的数字改为x 操作2:给出q个操作,输出进行了操作1中的第x到x+y-1操作后的结果 解法: 把询问离线,按照r从小到大排序 每次询问 ...
- go 学习 (四):接口 & 方法
接口声明 // 接口声明 语法:接口是一个 函数签名 的集合,函数签名(函数的声明,不包括实现) type interfaceName interface { method1(param param ...
- h5自带的日期类型input
在很多页面和web应用中都有输入日期和时间的地方,最典型的是订飞机票,火车票,酒店,批萨等网站. 在HTML5之前,对于这样的页面需求,最常见的方案是用Javascript日期选择组件.这几乎是无可争 ...
- Python爬虫 | re正则表达式解析html页面
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"). 正则表达式通常被用来匹配.检索.替换和 ...
- C++通过迭代修改字符串本身(auto类型说明符)
以字符串这种支持 for (declaration : expression) statement 这样for语句迭代的数据结构为例,我们看看auto关键字在类型推断中的作用. string s = ...
- Clouds Classification from Sentinel-2 Imagery with Deep Residual Learning and Semantic Image Segmentation
哨兵2号云检测的语义分割,提出了CloudNet,不使用池化和上采样操作,从头到尾保持原图大小,中间每个块使用ASPP和残差连接,网络结构如下 比较了CNN, FCN, DeeplabV3+,效果都没 ...