“sin_family"在哪里?在 struct sockaddr_in -/usr/include/netinet/in.h? [英] Where is "sin_family" in struct sockaddr_in - /usr/include/netinet/in.h?

查看:45
本文介绍了“sin_family"在哪里?在 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 的方式.

This is how sin_family comes in sockaddr_in .

这篇关于“sin_family"在哪里?在 struct sockaddr_in -/usr/include/netinet/in.h?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆