结构体sockaddr与struct sockaddr_in的区别和联系

简介:

上午学习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结构再传入系统调用函数中。

 


目录
相关文章
|
6月前
|
编译器 C++
struct 和 typedef struct 区别和用法总结
struct 和 typedef struct 区别和用法总结
104 0
|
6月前
|
编译器
memset结构体报错的问题
偶尔我们使用了会使用memset初始化结构体,但是会导致有时候编译器崩溃,这时候要检查结构体里面的各个字段是否全是基本类型,如果是自定义类或者库里面的类,有时候就会出现莫名其妙的错误,结构体初始化可以直接使用 {0}进行初始化
70 0
|
6月前
|
C语言 C++
[C++&C] Struct 和Typedef Struct的区别
[C++&C] Struct 和Typedef Struct的区别
149 0
|
C语言
struct结构体初识
struct结构体初识
55 0
|
C语言 C++ 编译器
C/C++语法知识:typedef struct 用法详解
第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
6332 0
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
672 0
error C2375: “WSACleanup”: 重定义 C2011 “sockaddr_in”:“struct”类型重定义
|
编译器 C++
struct和typedef struct
struct和typedef struct
112 0
结构体中的map尽量使用指针,否则不要使用memset
结构体中的map尽量使用指针,否则不要使用memset
138 0
|
网络协议 Linux 缓存
struct s_mbuf与struct sk_buff
struct s_mbuf与struct sk_buff本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
1333 0
|
缓存 Unix Java
struct sk_buff与socket
struct sk_buff与socket作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/u3/116859/showart.php?id=2441552 在Linux2.6中,struct sk_buf承担了socket的输入输出的传输缓存的任务。
1414 0