почему сетевые программы хранят IP-адреса в структуре IP-адресов - PullRequest
0 голосов
/ 20 декабря 2018

Я новичок в C, мои учебники посвящены сетевому программированию на C и утверждают, что сетевые программы хранят IP-адреса в структуре IP-адресов

/* Internet address structure */
struct in_addr {
unsigned int s_addr; /* Network byte order (big-endian) */
};

Я в замешательстве, не могумы просто храним 32-битное целое число?

1 Ответ

0 голосов
/ 21 декабря 2018

in_addr представляет адрес IPv4, который действительно может вписаться в 32-разрядное целое число.

Но существуют другие типы адресов сокетов, которые не могут, например адреса IPv6.

Каждыйтип адреса сокета использует свой собственный тип структуры:

  • in_addr для IPv4
  • in6_addr для IPv6
  • char[] для путей UNIX
  • и т. Д.

Обычно заключены в соответствующую sockaddr структуру:

  • sockaddr_in для IPv4
  • sockaddr_in6 для IPv6
  • sockaddr_un для UNIX
  • и т. Д.

Это то, что вы используете с API-интерфейсами сокетов, такими как bind(), connect(), accept(), sendto(),recvfrom() и т. Д.

Очень редко вам когда-нибудь понадобится использовать что-то вроде in_addr непосредственно.Обычно вы используете его вместе с API, который требует, чтобы IPv4-адрес передавался через in_addr struct.

...