c/c++ ipv4 to ipv6 support

(1)struct sockaddr_in 替换为addrinfo

addrinfo.ai_family 设置为AF_UNSPEC

addrinfo.ai_socktype 设置为SOCK_STREAM /SOCK_DGRAM

addrinfo.ai_protocol 设置为 IPPROTO_IP / IPPROTO_UDP

其余全部设0 / NULL

(2)使用getaddrinfo 获取 本机/远端 支持的协议支持socket info表

客户端第一个参数为远端IP字符串(IPv4/IPv6点分十进制皆可)

服务端第一个参数为NULL

(3)遍历info表 根据ai_family 值(AF_INET / AF_INET6) 选择合适的addrinfo

(4)使用addrinfo创建socket(ai_family, ai_socktype, ai_protocol)

(5)*若需要ipv4与ipv6同时监听 则需要设置setsockopt 的SO_REUSEADDR 值为1 仅限UDP

(6)使用addrinfo 绑定端口、使用sockfd 监听、使用addrinfo接受连接 / 使用addrinfo连接(ai_addr, ai _addrlen)

(7)回收info表 使用函数freeaddrinfo

(8)若需要保存addrinfo 需注意addrinfo.ai_addr为指针 需要手动malloc/new 空间为 sizeof(struct  sockaddr)

(9)通过addrinfo accept客户端连接/recvfrom客户端数据时,需设置addrinfo.ai_addrlen 为 sizeof(struct  sockaddr) 大小 否则获取的 ai_addr 不正确!

(10)允许使用recvfrom获取的客户端addrinfo 使用sendto发送

(11)若需要重连 则必须重新使用getaddrinfo读取远端配置 再使用读到的addrinfo重连 否则客户端先于服务端启动 会始终重连不成功!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值