【标 题】:sockaddr与sockaddr_in结构体简介
struct sockaddr { 但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构 typedef struct in_addr { sin_family指代协议族,在socket编程中只能是AF_INET sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向
struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。 在各种系统调用或者函数中,只要和网络地址打交道,就得用到这两个结构体。 网络中的地址包含3个方面的属性: 1 地址类型: ipv4还是ipv6 2 ip地址 3 端口 相应的,头文件有如下定义:
注释中标明了属性的含义及其字节大小,这两个结构体一样大,都是16个字节,而且都有family属性,不同的是: sockaddr用其余14个字节来表示sa_data,而sockaddr_in把14个字节拆分成sin_port, sin_addr和sin_zero 分别表示端口、ip地址。sin_zero用来填充字节使sockaddr_in和sockaddr保持一样大小。
sockaddr和sockaddr_in包含的数据都是一样的,但他们在使用上有区别: 程序员不应操作sockaddr,sockaddr是给操作系统用的 程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。
一般的用法为: 程序员把类型、ip地址、端口填充sockaddr_in结构体,然后强制转换成sockaddr,作为参数传递给系统调用函数 网络编程中一段典型的代码为:
|
sockaddr与sockaddr_in结构体简介
最新推荐文章于 2025-05-18 00:01:59 发布
2007-09-01 20:56