18.3.3 套接字地址

本文介绍了AF_UNIX和AF_INET两种套接字域的地址格式,包括sockaddr_un和sockaddr_in结构体的定义及各成员变量的作用。AF_UNIX使用本地文件路径作为地址,而AF_INET则通过IP地址和端口号来标识套接字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

18.3.3  套接字地址

每个套接字域都有独特的地址格式。对于一个AF_UNIX套接字来说,它的地址是由一个包含在sys/un.h头文件里的sockaddr_un结构描述的。该结构的定义为:

 

struct sockaddr_un {

   sa_family_t sun_family;      // AF_UNIX

   char sun_path[];             // 路径

};

 

因为不同类型的地址都需要传递到对套接字进程处理的系统调用里去,所以定义各种地址格式时使用的结构也都很相似,每个结构的开始都是一个定义地址类型(即套接字域)的数据项。sun_family_t是由X/Open技术规范定义的,在Linux系统上,它被声明为一个short类型。sun_path给出的路径长度是有限制的,Linux规定其最长不能超过108个字符。因为地址结构在长度方面是不固定的,所以许多套接字调用都要用到或输出一个用来复制特定地址结构的长度值。

AF_INET域里的套接字地址是由一个定义在netinet/in.h头文件里的sockaddr_in结构确定的。该结构的定义为:

 

struct sockaddr_in {

   short int sin_family;             // AF_INET

   unsigned short int sin_port;     // 端口号

   struct in_addr sin_addr;      // Internet地址

};

 

其中Internet地址是netinet/in.h头文件中定义的另一个结构体,该结构体的定义为:

 

struct in_addr {

   unsigned long int s_addr;

};

 

一个AF_INET套接字完全可以由它的域、IP地址和端口号确定下来。从应用程序的角度看,各种套接字的行为就像是文件描述符,用一个独一无二的整数就可以把它们表示出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值