4.從IPv4到IPv6
但是我要知道從當前的代碼變更為工作在IPv6上!告訴我!
好好~~
說了這麼多,我們就是講他。
1) 首先,請使用getaddrinfo()來獲得struct sockeaddr的信息,來替代我們的封裝。這將使你的程序代碼與IP版本無關,以便我們的後續步驟。
2) 在任何硬編碼的地方,請使用其它函數代替。
3) 更改AF_INET 為AF_INET6
4) 更改PF_INET 為PF_INET6 www.2cto.com
5) 賦值為INADDR_ANY的變更為in6addr_any。
struct sockaddr_in sa;
struct sockaddr_in6 sa6;
sa.sin_addr.s_addr = INADDR_ANY; // use my IPv4 address
sa6.sin6_addr = in6addr_any; // use my IPv6 address
當我們聲明struct in6_addr的時候,也能使用IN6ADDR_ANY_INIT來初始他。像下面:
struct in6_addr ia6 =IN6ADDR_ANY_INIT;
6) 使用struct sockaddr_in6來替換struct sockaddr_in。因為在上一版本中沒有sin6_zero這個字段。
7) 使用structin6_addr替換struct in_addr。
8) 使用inet_pton()替換inet_aton()和inet_addr();
9) 使用inet_ntop()替換inet_ntoa();
10)使用getaddrinfo()替換gethostbyname();
11)使用getnameinfo()替換gethostbyaddr();
雖然gethostbyaddr()也能工作在IPv6上。
12)使用IPv6的組播(multicast)替換INADDR_BROADCAST。
就這樣!
摘自 xiaobin_HLJ80的專欄