Linux Socket Programming by Example-第四章 确定Socket Domain

本文介绍了AF与PF的概念及其在不同系统中的应用。重点讲解了Socket通信中Domain与Protocol的组合使用,如SOCK_STREAM、SOCK_DGRAM等,并举例说明了常见的组合方式。

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

书中首先介绍了AF与PF的历史由来。
AF 表示ADDRESS FAMILY 地址族
PF 表示PROTOCL FAMILY 协议族

通常Window/Linux系统以下宏是等价的。
AF_UNIX=AF_LOCAL=PF_UNIX=PF_LOCAL=AF_LOCAL=PF_LOCAL
AF_INET=PF_INET

但在某些Unix/Linux系统可能有一些细微差别。
对于BSD系统,是AF,对于POSIX系统是PF。

为了兼容性,推荐如下使用:
对于socketpair与socket的domain参数,使用PF_LOCAL系列,
而在初始化套接口地址结构时,则使用AF_LOCAL.
例如:
int z; /* Status Code */
int sp[2]; /* Socket Pair */
struct sockaddr_un adr_unix; /* AF_LOCAL */

z = socketpair (PF_LOCAL,SOCK_STREAM,0,sp);
. . .
adr_unix.sun_family = AF_LOCAL;

接下来,重点介绍了Domain与Protocol的各种组合使用。
SOCK_STREAM: 基于网络流的I/O,对应TCP协议。
特点:
不知道什么时候读写开始/结束
底层保证数据传输的正确性(包括数据大写与发送顺序的正确性)
基于连接的Socket通信

SOCK_DGRAM:基于数据包的I/O,对应UDP协议
特点:
派发出去的包接收端不能保证派发顺序
派发出去的包可能丢失
包大小有限制

SOCK_SEQPACKET: 用于X.25
特点:
发送端的包大小被记录,接收端会按同样大小接收。
包的发送顺序在接收段保持不变。
基于连接的Socket通信

比如:发送端发送了2条消息,大小分别为25和30。
则接收端也依次收到2条消息,大小分别为25和30。

SOCK_RAW:由于基于底层协议进行编程,书中不作介绍。

常见组合:
PF_LOCAL SOCK_STREAM
PF_LOCAL SOCK_DGRAM
PF_INET SOCK_STREAM
PF_INET SOCK_DGRAM
PF_INET6 SOCK_STREAM
PF_INET6 SOCK_SEQPACKET
PF_INET6 SOCK_DGRAM


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值