sockaddr_in与sockaddr区别
来源:互联网 发布:python 判断进程存在 编辑:程序博客网 时间:2024/05/21 22:58
使用socket编程以来一直没弄清楚这两个数据结构有什么区别,今天突然想弄清楚这两个数据结构到底有什么差别,找了LINUX下的几个头文件,终于弄清楚了,看来某位大神说的不错,源码面前无密码可言。直接上代码,这里把相关的定义全部集中到一起,方便理解:
typedef unsigned short int sa_family_t; #define __SOCKADDR_COMMON(sa_prefix) \ sa_family_t sa_prefix##family#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int)) 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)]; };typedef uint32_t in_addr_t;struct in_addr { in_addr_t s_addr; };/* Structure describing a generic socket address. */struct sockaddr { __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */ char sa_data[14]; /* Address data. */ };
从代码中可以清楚看到,这两个结构大小都是16个字节。sockaddr_in这个结构是编程人员更容易理解的方式,将ip, port单独作为一个字段来处理,将且有一个填充字段使两个结构大小一致,可以相互转换。建议编程过程中不要使用sockaddr这个结构,让操作系统来使用。编程人员可以直接使用sockaddr_in这个结构,然后强转成sockaddr类型就可以了。
阅读全文
0 0
- sockaddr_in与sockaddr区别
- sockaddr与sockaddr_in的区别
- sockaddr与sockaddr_in的区别
- sockaddr 和 sockaddr_in 的区别与联系
- sockaddr 和 sockaddr_in 的区别与联系
- sockaddr、sockaddr_in的区别与联系
- struct sockaddr与struct sockaddr_in区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别 .
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- sockaddr_in , sockaddr , in_addr区别
- java的23中设计模式以及六大法则
- Unreal Engine 4 —— UE4的内存模型杂七杂八
- 各种主流音视频编码格式介绍
- 被问到最多的淘口令API调用方法
- Python使用Flask搭建RESTful API
- sockaddr_in与sockaddr区别
- Restful规范
- 判断回文字-初次接触栈
- spring boot linux 指定外部静态资源
- 将博客搬至CSDN
- Linux的硬链接和软链接
- 创建多个gulp.task
- listview两种adapter的练习
- Python廖雪峰实战web开发(Day13-提高开发效率)