TinyHttpd中sockaddr与struct sockaddr_in的区别

本文介绍了在网络编程中常用的结构体sockaddr及sockaddr_in,详细解析了这两个结构体在Linux环境下的定义与使用场景,并说明了两者之间的转换方式。

上午学习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,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值