gpt4 book ai didi

c - getnameinfo 原型(prototype)要求 sockaddr 而不是 sockaddr_in?

转载 作者:太空狗 更新时间:2023-10-29 15:34:03 25 4
gpt4 key购买 nike

getnameinfo 原型(prototype)需要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);

最佳答案

struct sockaddr 是具体协议(protocol)地址结构的“父类(super class)”,例如 struct sockaddr_instruct sockaddr_in6 struct sockaddr_un 等。 getnameinfo(3) 根据地址族(sa_family 成员)分派(dispatch)到特定的执行路径。

就内存而言 - struct sockaddr_in 的三个成员 overlaid struct sockaddrsa_data 成员。看一下 UnP book 的第 3 章.

关于c - getnameinfo 原型(prototype)要求 sockaddr 而不是 sockaddr_in?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com