Почему in_addr6 не определен в netinet в Ubuntu 18.04.1? - PullRequest
0 голосов
/ 08 сентября 2018

В настоящее время я создаю кроссплатформенную библиотеку на C, которая работает с IP-адресами. Поэтому я подумал, что мог бы использовать типы in_addr и in_addr6 для представления значений, так как казалось, что они будут вполне переносимыми.

Но похоже, что структура in_addr6 не определена в <netinet/in.h> в моей установке Ubuntu 18.04.1 (Подсистема Windows для Linux).

Я не получаю результатов, когда ищу в заголовках in_addr6 следующим образом:

robin@ROBIN-PC:/usr/include/netinet$ grep -rnw '/usr/include/netinet' -e 'in_addr6'

Если я ищу in_addr, я получаю несколько результатов:

robin@ROBIN-PC:/usr/include/netinet$ grep -rnw '/usr/include/netinet' -e 'in_addr'
/usr/include/netinet/if_ether.h:90:     /* struct in_addr *ipaddr; */ \
/usr/include/netinet/igmp.h:70:  struct in_addr igmp_group;     /* group address */
/usr/include/netinet/in.h:31:struct in_addr
/usr/include/netinet/in.h:241:    struct in_addr sin_addr;              /* Internet address.  */
/usr/include/netinet/in.h:247:                     sizeof (struct in_addr)];
/usr/include/netinet/in.h:267:    struct in_addr imr_multiaddr;
/usr/include/netinet/in.h:270:    struct in_addr imr_interface;
/usr/include/netinet/in.h:276:    struct in_addr imr_multiaddr;
/usr/include/netinet/in.h:279:    struct in_addr imr_interface;
/usr/include/netinet/in.h:282:    struct in_addr imr_sourceaddr;
/usr/include/netinet/in.h:326:    struct in_addr imsf_multiaddr;
/usr/include/netinet/in.h:329:    struct in_addr imsf_interface;
/usr/include/netinet/in.h:337:    struct in_addr imsf_slist[1];
/usr/include/netinet/in.h:341:                            - sizeof (struct in_addr)                   \
/usr/include/netinet/in.h:342:                            + (numsrc) * sizeof (struct in_addr))
/usr/include/netinet/in.h:602:extern int getipv4sourcefilter (int __s, struct in_addr __interface_addr,
/usr/include/netinet/in.h:603:                          struct in_addr __group, uint32_t *__fmode,
/usr/include/netinet/in.h:604:                          uint32_t *__numsrc, struct in_addr *__slist)
/usr/include/netinet/in.h:608:extern int setipv4sourcefilter (int __s, struct in_addr __interface_addr,
/usr/include/netinet/in.h:609:                          struct in_addr __group, uint32_t __fmode,
/usr/include/netinet/in.h:611:                          const struct in_addr *__slist)
/usr/include/netinet/ip.h:128:    struct in_addr ip_src, ip_dst;        /* source and dest address */
/usr/include/netinet/ip_icmp.h:145:    struct in_addr ih_gwaddr;        /* gateway address */

Это вызывает у меня несколько вопросов:

  • Определена ли структура in_addr6 в другом заголовке? (Догадаюсь нет, так как grep -rnw '/usr/include/' -e 'in_addr6' не дает результатов)
  • Почему структура in_addr6 не определена в моей установке Ubuntu?
  • Когда вы можете ожидать, что будет определен in_addr6 (например: другие дистрибутивы или когда Ubuntu не установлен как WSL)?

1 Ответ

0 голосов
/ 09 сентября 2018

Структура in_addr6 специфична для Windows. Структура in6_addr доступен в Windows, Linux и macOS и должен использоваться для переносимых библиотек.

...