gpt4 book ai didi

c - struct sockaddr_in -/usr/include/netinet/in.h 中的 "sin_family"在哪里?

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:24 26 4
gpt4 key购买 nike

我是 C 编程中的新网络套接字。我正在尝试制作一个简单的服务器 - 客户端。以下是我想要的:

...
//Binding to a port
struct sockaddr_in name;
name.sin_family = PF_INET;
name.sin_port = (in_port_t)htons(30000);
name.sin_addr.s_addr = htonl(INADDR_ANY);
...

sin_family -/usr/include/netinet/in.h - Linux 在哪里?如果您是专业人士,请告诉我我需要做什么。

最佳答案

struct sockaddr_in
{
__SOCKADDR_COMMON (sin_);
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */

/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
__SOCKADDR_COMMON_SIZE -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};

你看到sockaddr_in结构中有一个__SOCKADDR_COMMON(sin_),它是一个宏。现在让我们看看 /usr/include/i386-linux-gnu/bits/sockaddr.h 中的宏定义:

#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family

#define __SOCKADDR_COMMON_SIZE  (sizeof (unsigned short int))

所以最终 sockaddr_in 被扩展为:

struct sockaddr_in
{
sa_family_t sin_family;
in_port_t sin_port; /* Port number. */
struct in_addr sin_addr; /* Internet address. */

/* Pad to size of `struct sockaddr'. */
unsigned char sin_zero[sizeof (struct sockaddr) -
(sizeof (unsigned short int) -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};

这就是 sin_family 进入 sockaddr_in 的方式。

关于c - struct sockaddr_in -/usr/include/netinet/in.h 中的 "sin_family"在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27307412/

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