Прототип getnameinfo запрашивает sockaddr, а не sockaddr_in?

Прототип getnameinfo запрашивает sockaddr, но я видел только примеры использования sockaddr_in Можно ли переписать этот пример для sockaddr? sin_family становится sa_family, но как насчет sin_port и sin_addr? Как они включены в sa_data?


struct sockaddr{
    unsigned short  sa_family;
    char            sa_data[14];
};

struct sockaddr_in{ short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; };


struct sockaddr_in sin;
memset(&sin, 0, sizeof(sin));
sin.sin_family      = AF_INET;
sin.sin_addr.s_addr = inet_addr(IPvar);
sin.sin_port        = 0; // If 0, port is chosen by system

getnameinfo( (struct sockaddr *)&sin, sizeof(sin), buffervar, sizeof(buffervar), NULL, 0, 0);
4 голоса | спросил Jane 5 AMpMon, 05 Apr 2010 02:55:07 +040055Monday 2010, 02:55:07

1 ответ


0

struct sockaddr является «суперклассом» конкретных структур адресов протокола, таких как struct sockaddr_in, struct sockaddr_in6 и struct sockaddr_un и т. д. getnameinfo(3) отправляет в определенный путь выполнения на основе семейства адресов (sa_family member.)

Что касается памяти, то три члена struct sockaddr_in перекрываются с struct sockaddr Участник sa_data. Взгляните на главу 3 книги UnP .

ответил Nikolai Fetissov 5 AMpMon, 05 Apr 2010 03:14:29 +040014Monday 2010, 03:14:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132