Я модернизирую устаревшее приложение, которое хранит IPv4-адреса в массиве фиксированного размера беззнаковых длин. Адреса хранятся в порядке байтов хоста. То есть, это ntohl()
'd при выходе из API сокета и htonl()
' d при переходе в API сокета.Каков наилучший способ хранения набора адресов IPv6?
Теперь, чтобы поддерживать IPv6, мне интересно, что делать с этим массивом. Должен ли я хранить строковое представление и сделать его массивом char[INET6_ADDRSTRLEN]
или даже std::vector<std::string>
или std::set<std::string>
для поддержки большего количества адресов.
Или я мог бы хранить структуры in6_addr
, что, вероятно, более эффективно для работы с чем std::string
, но тогда мне интересно, как здесь применяется порядок байтов в сети и хоста?
Посетите: http://stackoverflow.com/questions/26531531/efficient-way-to-store-ipv4-ipv6-addresses –
'in6_addr' должен быть определенно лучшим выбором по сравнению с' std :: string'. «Как применяется порядок байтов в сети и хоста?», вы не сможете больше использовать простые «длинные» значения для хранения адресов IPv6. –
, так что просто используйте struct in6_addr и не пытайтесь преобразовать его в 128-битное целое число. Кажется, справедливо. – Philipp