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
};

相关文章推荐

socket编程——sockaddr_in结构体操作

原文地址:http://blog.sina.com.cn/s/blog_6151984a0100etj1.html       sockaddr结构体 sockaddr的缺陷:sa_data把目...

socket编程——sockaddr_in结构体操作

http://blog.sina.com.cn/s/blog_6151984a0100etj1.html     sockaddr结构体 sockaddr的缺陷:sa_data把目标地址和端口信息...

socket编程——sockaddr_in结构体操作

sockaddr结构体 sockaddr的缺陷:sa_data把目标地址和端口信息混在一起了 struct sockaddr {        unsigned short sa...

socket编程——sockaddr_in结构体操作

socket编程——sockaddr_in结构体操作 sockaddr结构体 sockaddr的缺陷:sa_data把目标地址和端口信息混在一起了 struct sockad...
  • kirawoo
  • kirawoo
  • 2012年04月17日 14:44
  • 234

struct sockaddr_nl 结构体 由来、含义以及使用——获取Linux路由表

Linux 用户态与内核态的交互   在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工...

struct sockaddr_nl 结构体 由来、含义以及使用——获取Linux路由表

Linux 用户态与内核态的交互   在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工具,它与内核...

struct sockaddr_nl 结构体 由来、含义以及使用——获取Linux路由表

From: http://yangelc.blog.sohu.com/68245920.html Linux 用户态与内核态的交互   在 Linux 2.4 版以后版本的内核中,几乎...

关于 linux 中sockaddr_in

在windows/linux下有下面结构: sockaddr结构 struct sockaddr { unsigned short sa_family; /* address fam...

struct sockaddr_nl 结构体 由来、含义以及使用

Linux 用户态与内核态的交互   在 Linux 2.4 版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用 netlink 套接字实现的,例如iprote2网络管理工具,...

sockaddr与sockaddr_in结构体详细讲解

struct sockaddr {unsigned short sa_family;     /* address family, AF_xxx */char sa_data[14];        ...
  • vlily
  • vlily
  • 2011年07月18日 10:42
  • 367
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ZZ: linux IPV4 IPV6 sockaddr 几个结构体及其关系: sockaddr sockaddr_in sockaddr_in6
举报原因:
原因补充:

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