博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TinyHttpd中sockaddr与struct sockaddr_in的区别
阅读量:6712 次
发布时间:2019-06-25

本文共 1112 字,大约阅读时间需要 3 分钟。

上午学习TinyHttpd的源码,sockaddr 结构体以前没接触过,

在网络编程中经常用到struct sockaddr和struct sockaddr_in,这里简单介绍。

在linux环境下,结构体 struct sockaddr在/usr/include/linux/socket.h 中定义,具体如下:

1
2
3
4
typedef 
unsigned 
short 
sa_family_t;
struct 
sockaddr {
sa_family_t sa_family; 
/* address family, AF_xxx */
char 
sa_data[14]; 
/* 14 bytes of protocol address */

  

在linux环境下,结构体 struct sockaddr_in在/usr/include/netinet/in.h 中定义,具体如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* Structure describing an Internet socket address. */
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_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */
};

 

struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。

二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。

一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。

 

本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/4105639.html,如需转载请自行联系原作者

你可能感兴趣的文章
初级Java程序员和Java架构师的区别:内功心法修炼图
查看>>
DNS解析实验
查看>>
[备忘]国内的在线API阅读网站
查看>>
用户及组的介绍
查看>>
Apache压力测试
查看>>
详细解说STL hash_map系列
查看>>
云吞铺子:性能抖动剖析 2
查看>>
《PBI系列 车图 色彩搭配 数据分析 01》花随花心著
查看>>
智能 |MES与设备集成时有哪几种握手方式
查看>>
shell脚本练习
查看>>
效率最快10个Excel实用技巧,Excel秒杀
查看>>
设计开发你必须了解的5个方面
查看>>
多张jpg图片怎么转换成png格式
查看>>
beautifulsoup的简单用法
查看>>
Kubernetes高级调度- Taint和Toleration、Node Affinity分析
查看>>
手机怎么恢复照片呢
查看>>
深度操作系统 15.8——极致体验,美观高效
查看>>
1211本书通通免费!这是个专为程序员准备的网站
查看>>
褚老与褚橙,探秘情感消费市场的内核
查看>>
均匀分布随机函数的实现
查看>>