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_instruct sockaddr_in6struct sockaddr_unなどの具体的なプロトコル アドレス構造の「スーパークラス」です。アドレス ファミリ (メンバー)getnameinfo(3)に基づいて特定の実行パスにディスパッチします。sa_family

メモリに関する限り、 の 3 つのメンバーは のメンバーでstruct sockaddr_inオーバーレイさます。UnP bookの第 3 章を見てください。struct sockaddrsa_data

于 2010-04-04T23:14:29.727 に答える