"sin_family"在哪里?在struct sockaddr_in中-/usr/include/netinet/in.h? [英] Where is "sin_family" in struct sockaddr_in - /usr/include/netinet/in.h?
问题描述
我是c编程中的新网络套接字.我正在尝试建立一个简单的服务器-客户.以下是我想要的东西:
I'm new networking socket in c programming. And I'm trying to make a simple sever - client. The following is what I want to have :
...
//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 在哪里?如果您是专业人士,请告诉我我该怎么做.
Where is sin_family - /usr/include/netinet/in.h - Linux ? If you are a pro, please tell me know what I need to do.
推荐答案
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 中查看宏定义:
You see there is a __SOCKADDR_COMMON(sin_)
in sockaddr_in
structure which is a macro.
now lets see the macro defination in /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
中的方式.
这篇关于"sin_family"在哪里?在struct sockaddr_in中-/usr/include/netinet/in.h?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!