c ++ - IPv6 på programmeringsniveau i Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad er forskellen mellem IPv6 og IPv4 på programmeringsniveau i Windows?


Kan vi bare ændre IPv4-adresse til IPV6 og holde alt andet program ens, vil det fungere?

Bedste reference


Det afhænger virkelig af hvad dit program gør.


En IPV6-adresse tager 16 bytes, i stedet for de fire, der bruges af IPV4. Strengrepræsentationerne er også forskellige.


At skabe en stikkontakt er næsten det samme:


            sock = socket(PF\_INET, SOCK\_STREAM, IPPROTO\_TCP);


Bare skift PF\_INET til PF\_INET6.


Connect er lidt anderledes:


            nRet = connect(sock, 
                           reinterpret\_cast<SOCKADDR *>(&SockAddr), 
                           sizeof(SockAddr));


I IPV4 er SockAddr en sockaddr\_in struct, i IPV6 er det en sockaddr\_in6.


Du skal bruge noget som getaddrinfo () til init SockAddr som gethostbyname () virker ikke for IPV6.


bind (), lyt () og accepter () er mere ens. Når stikket er etableret, er læsning, skrivning mv uafhængig af IP-versionen.


Hvis du arbejder på et højere niveau (f.eks. HTTP), skal dit program ikke behøve nogen ændring, men det kan være nødvendigt at linke til forskellige biblioteker.

Andre referencer 1


IPv6 spec (RFC 3493) definerer nogle nye API metoder og datastrukturer. Microsoft implementerede den tidlige version af API'en (RFC 2553) i Windows, så der er nogle forskelle. Dette link beskriver forskellene og bryder ned, hvilke API'er der understøttes i hvilken version af Windows:


http://tdistler.com/2011/02/28/cross-platform-ipv6-socket-programming[3]