c语言socket的地址分析
来源:互联网 发布:php两个等号和三个等号 编辑:程序博客网 时间:2024/05/17 22:47
socket编程中主要涉及3种地址结构:
1、IPv4地址结构
unp中描述
struct in_addr {in_addr_t s_addr;/*32-bit IPv4 address.network byte orderd*/};struct sockaddr_in {uint8_t sin_len;/*length of structure(16)*/sa_family_tsin_family;/*AF_INET*/in_port_tsin_port;/*16-bit port number*/struct in_addrsin_addr;/*32-bit IPv4 address*/charsin_zero[8];/*unused*/}
netinet/int.h中实现
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)]; };
没有sin_len数据。
2、IPv6地址结构
unp中描述
struct in6_addr {unit8_t s6_addr[16];/*128-bit IPv6 address.network byte orderd*/};struct sockaddr_in6 {uint8_tsin6_len;/*length of structure(24)*/sa_family_tsin6_family;/*AF_INET6*/in_port_tsin6_port;/*transport layer port.network byte orderd*/uint32_tsin6_flowinfo;/*priority & flow laber*/struct in6_addrsin6_addr;/*IPv6 address.network byte orderd*/};
netinet/int.h中实现
struct sockaddr_in6 { __SOCKADDR_COMMON (sin6_); in_port_t sin6_port; /* Transport layer port # */ uint32_t sin6_flowinfo; /* IPv6 flow information */ struct in6_addr sin6_addr; /* IPv6 address */ uint32_t sin6_scope_id; /* IPv6 scope-id */ };
3、通用地址结构
struct sockaddr {uint8_tsa_len;sa_family_tsa_family;/*address family: AF_xxx value*/charsa_data[14];/*14*8 = 128-bit */};
三者结构如图所示
有些实现中没有_len成员,此时family成员占2bytes大小。
套接口函数需要支持所以协议族的套接口地址,故采用通用地址结构指针,调用时直接将协议族的地址强制转换成通用地址结构。
- c语言socket的地址分析
- C语言-Socket地址的转换方式
- C语言内存地址分析
- C语言的地址传递
- 分析linux下的进程地址空间,以及c语言的函数调用过程
- linux C语言 文件描述符 读写地址分析
- 【续】linux C语言 文件描述符 读写地址分析
- C语言:内存地址分析 & sizeof和strlen用法总结
- Linux C语言实现的Socket通信
- C语言实现的Socket编程
- c语言的socket编程----服务器端
- C 语言 实现的socket 通信
- C 语言 实现的socket 通信
- c语言实现TCP的socket通信
- C语言实现简单的socket实例
- 用C语言实现的Socket通信
- C语言获取文件夹地址的方法
- C语言变量内存地址的分配
- 用java生成包含图片的PDF
- MySQL 5.5 Semi-sync Replication安装配置、参数说明
- TCP/IP各种数据包结构体
- Android4.1:如何把一个应用添加到Settings列表中...
- 333
- c语言socket的地址分析
- USACO 3.4 Electric Fence
- 键盘遮挡问题解决办法
- iOS开发视频教程 UI部分:9、应用程序的生命周期
- 【BZOJ1003】[HNOI2008]玩具装箱toy
- git使用ssh密钥 (转)
- warning LNK4075: 忽略”/EDITANDCONTINUE”(由于”/INCREMENTAL:NO”规范)
- What's the J2EE?
- 大学各专业自学网站