4

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

1 回答 1

4

struct sockaddrstruct sockaddr_in是具体协议地址结构(如、struct sockaddr_in6struct sockaddr_un等)的“超类” 。getnameinfo(3)调度到基于地址族(sa_family成员)的特定执行路径。

就记忆而言 - 的三个成员与'struct sockaddr_in成员重叠。看看UnP 书的第 3 章。struct sockaddrsa_data

于 2010-04-04T23:14:29.727 回答