Effiziente Möglichkeit zum Speichern von IPv4 / IPv6-Adressen
Ich arbeite an einem C / C ++ - Netzwerkprojekt, bei dem die IPv4- und IPv6-Netzwerkstacks verwendet werden sollen. Das Projekt funktioniert nur unter Linux. Daher habe ich versucht, eine effiziente Möglichkeit zum Speichern der IP-Adressen und zur Unterscheidung zwischen den Protokollfamilien zu finden. Der erste Ansatz war eine Gewerkschaft:
struct ip_addr {
uint8_t fam; // socket family type
union {
struct in_addr ipv4_sin_addr;
struct in6_addr ipv6_sin_addr;
}addr;
};
Der zweite Ansatz bestand darin, ein @ zu definiertypedef std::vector<unsigned char> IPAddressNumber
und machen den Unterschied nach der Anzahl der Bytes aus dem Vektor.
Der dritte Ansatz bestand darin, int128_t / uint128_t oder __int128_t von gcc zu verwenden.
Für diesen letzten Fall möchte ich wissen, ab welcher Version von GCC diese Typen unterstützt werden, für welche Plattformen (insbesondere IA-32 / IA-64) und ob bekannte Fehler vorliegen. Welche der oben genannten Lösungen ist möglicherweise die bequemste?