Unix Socket作为操作系统级进程间通信(IPC)的核心机制,其函数设计体现了Unix哲学的简洁与高效。通过抽象网络通信为文件描述符操作,开发者能以统一接口处理本地与网络通信。核心函数如socket()、bind()、listen()、accept()构建了服务端基础架构,而connect()、send()、recv()则支撑客户端交互。关键数据结构sockaddr统一地址表示,ioctl()提供底层控制,select()/poll()实现多路复用。这些函数通过系统调用暴露,兼具网络协议栈能力与本地IPC效率,成为C/C++网络编程的基石。其错误处理机制依赖errno与返回值,需结合getsockopt()获取详细状态。

u	nix socket常用函数

一、核心操作函数

以下表格对比服务端与客户端核心函数的差异:

函数类别服务端函数客户端函数关键参数
创建阶段socket()socket()AF_INET/AF_UNIX, Stream/Dgram
绑定阶段bind()-sockaddr结构体
监听阶段listen()-backlog连接数
连接建立accept()connect()已完成的sockaddr, 目标地址

二、I/O处理函数

表格展示send()与recv()的参数差异:

函数方向标志位参数返回值含义
send()发送MSG_DONTWAIT等实际发送字节数
recv()接收MSG_PEEK等实际接收字节数
write()通用写入-写入字节数
read()通用读取-读取字节数

三、套接字选项设置

表格对比setsockopt()与getsockopt()的应用场景:

IPPROTO_TCPIPPROTO_IP
函数层级典型选项作用范围
setsockopt()SOL_SOCKETSO_REUSEADDR全局套接字层
setsockopt()TCP_NODELAYTCP协议层
getsockopt()SOL_SOCKETSO_ERROR错误状态查询
getsockopt()IP_TTLIP协议层

四、地址处理函数

地址转换相关函数对比:

函数输入类型输出类型适用场景
inet_pton()文本IP(v4/v6)二进制sockaddr字符串转结构体
inet_ntop()二进制sockaddr文本IP结构体转字符串
getsockname()-sockaddr获取本地绑定地址
getpeername()-sockaddr获取对端地址

五、高级特性函数

表格展示带外数据与多播相关函数:

功能类别函数协议支持特殊参数
带外数据send() with MSG_OOBTCP/UDPTCP紧急数据
多播发送setsockopt() SO_SETMULTICASTUDP多播组管理
广播设置setsockopt() SO_BROADCASTUDP启用广播权限
全双工控制shutdown()TCP/UDP单向关闭通道

六、错误处理机制

错误处理相关函数与全局变量对比:

错误信息打印
检测方式函数/变量适用场景信息粒度
返回值检查-1返回值所有系统调用操作成功性
errno全局变量errno错误发生时错误类型码
SO_ERROR选项getsockopt(SO_ERROR)异步错误检测累积错误状态
perror()函数perror()可读性错误描述

七、多路复用函数

select()与poll()的参数对比:

FD_SETSIZE(1024)系统资源限制信号屏蔽集控制内核事件驱动
函数监视对象参数结构最大监视数
select()fd_set集合fd_set, timeval
poll()pollfd数组struct pollfd[]
pselect()同select()增加sigmask参数
epoll_wait()epoll实例struct epoll_event[]

八、性能优化函数

表格对比缓冲区管理与协议优化函数:

TCP/UDPTCPTCPTCP(Linux特有)
优化类型相关函数作用效果适用协议
缓冲区调整setsockopt(SO_RCVBUF)增大接收窗口
Nagle算法控制setsockopt(TCP_NODELAY)禁用合并小包
保活设置setsockopt(SO_KEEPALIVE)定期探测连接
CORK选项setsockopt(TCP_CORK)合并数据包发送

Unix Socket函数体系通过分层抽象实现了网络通信的标准化处理。从socket()创建通信端点开始,服务端通过bind()/listen()进入监听状态,客户端通过connect()建立连接。数据传输阶段的send()/recv()与write()/read()形成互补,前者支持协议控制标志,后者提供基础流操作。地址转换函数解决文本与二进制结构的映射问题,setsockopt()系列实现协议栈参数的动态调整。错误处理采用errno全局变量与SO_ERROR选项相结合的机制,兼顾同步与异步检测需求。多路复用函数突破单进程单连接限制,select()/poll()/epoll_wait()在不同场景下各显优势。性能优化相关函数通过调整缓冲策略、控制协议特性,在延迟与吞吐量之间寻求平衡。这些函数共同构建起从物理连接到应用层协议的完整通信链条,其设计思想深刻影响了现代网络编程范式。随着eBPF、SPD等新技术的兴起,Unix Socket函数体系仍在持续演进,但其核心原理仍为理解网络通信本质的重要基石。