(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重连 否则客户端先于服务端启动 会始终重连不成功!