gpt4 book ai didi

c - C中的结构类型转换

转载 作者:行者123 更新时间:2023-12-05 01:29:10 26 4
gpt4 key购买 nike

在下面的代码片段中,我发现 sockaddr_in 被类型转换为 sockaddr as '(struct sockaddr *) &sin' 。我只想知道 sockaddr_in 中的变量是什么,将相应地映射到 sockaddr 。以下是片段。

struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};

//IPv4 AF_INET 套接字:

struct sockaddr_in {
short sin_family; // e.g. AF_INET, AF_INET6
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};

struct sockaddr_in sin;

sin.sin_family = AF_INET;
sin.sin_port = htons(floodport);
sin.sin_addr.s_addr = inet_addr(argv[1]);

//类型转换

(struct sockaddr *) &sin  // what values of sockaddr_in would be mapped to sockaddr ?

此转换在套接字编程中的 sendto() 中使用,如下所示。

sendto(s, datagram, iph->tot_len,0, (struct sockaddr *) &sin,sizeof(sin))

提前致谢。

最佳答案

struct sockaddr 的唯一目的是将一种类型传递给 sendto() 等函数。

事实上,你不会将它用于其他目的,你有other structs比如

  • struct sockaddr_in 用于旧版 IPv4
  • struct sockaddr_in6 用于 IPv6
  • struct sockaddr_un 用于 Unix 套接字
  • struct sockaddr_bth 用于蓝牙
  • struct sockaddr_storage 和你的最大的一样大建筑学。可以巧妙地用于存储您的类型的地址不知道。

关于c - C中的结构类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13723971/

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