Обратил внимание, что в реализации для mac структура sockaddr_in выглядит следующим образом:
struct sockaddr_in {
__uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
Т.е. в отличии от виндово/линуксовой реализации, тут еще присутствует поле sin_len. Что енто, для чего оно и на сколько критичное его заполнение?
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, dosik, Вы писали:
D>>Т.е. в отличии от виндово/линуксовой реализации, тут еще присутствует поле sin_len. Что енто, для чего оно и на сколько критичное его заполнение?
N>Это во всех BSD.
N>Если 0, то принимается по умолчанию согласно значению sin_family.
N>Ставится не в 0 для структур переменного размера (таких, как sockaddr_un).
N>Перед любым использованием любую из структур sockaddr* надо через bzero/memset заливать нулевыми байтами, в некоторых случаях не только sin_len, но и sin_zero даёт интересные последствия.
Старые версии Windows заливали sin_zero нулями самостоятельно, что иногда приводило к интересным последствиям, если память read-only
http://windowsasusual.blogspot.ru/2013/05/detective-story-sendto-and-10014.html