ZZ: linux IPV4 IPV6 sockaddr 几个结构体及其关系: sockaddr sockaddr_in sockaddr_in6

转载 2013年12月02日 20:41:53

1

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

这个结构体是IP4 IP6通用的,但是但看结构体长度好像只适合IPV4

2

struct sockaddr_in {
  __kernel_sa_family_t sin_family;/* Address family*/
  __be16 sin_port;/* Port number*/
  struct in_addr sin_addr;/* Internet address*/

  /* Pad to size of `struct sockaddr'. 补充到16个字节长度 */
  unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};

这个结构体是IPV4特有的sockaddr,其中port是端口, sin_addr指的是IP4地址,WORD32类型。本质上这个结构体同sockaddr是一样的,但是为了编程的方便操作,可以理解为sockaddr的逻辑实现。

任何时候都可以做如下强制转换。

sockckaddr_in   Ipv4sockaddr;
xxxx

sockaddr *p = (sockaddr *)&Ip4sockaddr;

其中

struct in_addr {
__be32 s_addr;
};

3

struct sockaddr_in6 {
unsigned short intsin6_family;    /* AF_INET6 */
__be16 sin6_port;      /* Transport layer port # */
__be32 sin6_flowinfo;  /* IPv6 flow information */
struct in6_addrsin6_addr;      /* IPv6 address */ 
__u32 sin6_scope_id;  /* scope id (new in RFC2553) */
};

这个结构式IPV6 对sockaddr逻辑实现,同样可以在相关接口进行强制转换。

 

其中

struct in6_addr {
union {
__u8 u6_addr8[16];
__be16 u6_addr16[8];
__be32 u6_addr32[4];
} in6_u;
#define s6_addr in6_u.u6_addr8
#define s6_addr16 in6_u.u6_addr16
#define s6_addr32 in6_u.u6_addr32
};

【网络编程基础笔记】struct sockaddr和struct sockaddr_in的区别和用法

编写网络应用程序时,经常会用到sockaddr和sockaddr_in这两个结构体,对于新手来说,比较容易搞混它们的区别和使用方法。本文的笔记试图讲清楚它们之间的关系和正确的用法。 1. struc...
  • slvher
  • slvher
  • 2013年04月26日 19:36
  • 2373

sockaddr_in , sockaddr , in_addr区别Socket编程函数集(非常有用)

struct sockaddr 是一个通用地址结构,这是为了统一地址结构的表示方法,统一接口函数,使不同的地址结构可以被bind() , connect() 等函数调用;struct sockaddr...
  • jin13277480598
  • jin13277480598
  • 2016年12月23日 17:15
  • 457

socket兼容IPV4、IPV6网络底层connect写法

由于IOS苹果审核需要支持ipv6,我公司手游用的socket底层调用的是C标准库,故在此记录下需要调整修改的地方 这里贴出主要的Connect方法,Connect能连接上了,后面send,recv都...
  • XunMengdQingMao
  • XunMengdQingMao
  • 2016年06月07日 15:02
  • 5347

【C++】Winsock套接字编程,struct sockaddr、sockaddr_in,主机网络字节序

前一篇关于windows平台下winsock套接字编程的相关api struct sockaddr与struct sockaddr_in 在bind函数,connect函数里提到了套接字编...
  • shihoongbo
  • shihoongbo
  • 2016年06月11日 17:05
  • 1963

整理:Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

sockaddr struct sockaddr { unsigned  short  sa_family;     /* address family, AF_xxx */ char ...
  • gaotong2055
  • gaotong2055
  • 2013年04月07日 17:33
  • 26300

struct sockaddr_in等Socket编程相关数据类型定义- -

计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需...
  • yiziweiyang
  • yiziweiyang
  • 2016年08月11日 14:34
  • 927

IP地址格式转换(htonl、ntohl;inet_addr、inet_ntoa)

1、htonl ()和ntohl( ) u_long PASCAL FAR ntohl (u_long netlong); u_short PASCAL FAR ntohs (u_shor...
  • liding545902
  • liding545902
  • 2016年01月05日 10:02
  • 5052

网络编程:Socket编程从IPv4转向IPv6支持

目前运行主流的IT系统中,用于解决分布式系统内部模块及不同的系统间通信的一种主要的解决方案就是使用套接字Socket来开发应用。由于当前大部分正在运行的IT系统中使用套接字Socket开发环境基本上都...
  • Blaider
  • Blaider
  • 2014年10月09日 11:22
  • 5181

socket编程——sockaddr_in结构体操作

http://blog.sina.com.cn/s/blog_6151984a0100etj1.html     sockaddr结构体 sockaddr的缺陷:sa_data把目标地址和端口信息...
  • chengfangang
  • chengfangang
  • 2013年02月25日 14:41
  • 3328

sockaddr_ll ---设备无关的物理层地址结构

sockaddr_ll ---设备无关的物理层地址结构 sockaddr_ll: 表示设备无关的物理层地址结构 定义: [cpp] view plaincopy ...
  • lee244868149
  • lee244868149
  • 2015年02月11日 09:04
  • 4642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZZ: linux IPV4 IPV6 sockaddr 几个结构体及其关系: sockaddr sockaddr_in sockaddr_in6
举报原因:
原因补充:

(最多只允许输入30个字)