將現有 IPv4 代碼升級為雙棧兼容的 12 步走:
sockaddr_in,改用 getaddrinfo() 獲取协议無關的 sockaddrAF_INET → AF_INET6PF_INET → PF_INET6INADDR_ANY → in6addr_any 或 IN6ADDR_ANY_INIT 初始化 in6_addrsockaddr_in → sockaddr_in6(注意無 sin6_zero 字段)in_addr → in6_addrinet_aton()/inet_addr() → inet_pton()inet_ntoa() → inet_ntop()gethostbyname() → getaddrinfo()gethostbyaddr() → getnameinfo()(舊 API 也支持 IPv6)INADDR_BROADCAST → IPv6 組播// IPv4
struct sockaddr_in sa;
sa.sin_addr.s_addr = INADDR_ANY;
// IPv6
struct sockaddr_in6 sa6;
sa6.sin6_addr = in6addr_any;
// 或
struct in6_addr ia6 = IN6ADDR_ANY_INIT;
getaddrinfo() 返回鏈表,遍歷嘗試 socket()/bind()/connect() 實現雙棧自動回退AI_PASSIVE 旗標配合 NULL 節點名獲取任意地址-lnsl -lsocket -lresolv (Solaris) 或 ws2_32.lib (Windows)摘自 xiaobin_HLJ80 的專欄