以下是 Socket API 的核心接口(基于 Berkeley Sockets,常见于 Linux/Unix 和 Windows 平台),按功能分类整理:
1. 基础套接字操作
接口 |
描述 |
socket() |
创建套接字(指定协议族、类型、协议,如 AF_INET , SOCK_STREAM )。 |
bind() |
将套接字绑定到本地 IP 地址和端口号。 |
listen() |
(TCP) 设置套接字为监听状态,等待连接请求。 |
accept() |
(TCP) 接受客户端连接,返回新套接字用于通信。 |
connect() |
(TCP/UDP) 客户端发起连接(TCP)或设置默认目标地址(UDP)。 |
close() / shutdown() |
关闭套接字(shutdown 可控制关闭方向:读/写/双向)。 |
2. 数据收发
接口 |
TCP/UDP 区别 |
send() / write() |
(TCP) 发送数据(可能阻塞,需处理部分发送的情况)。 |
recv() / read() |
(TCP) 接收数据(需处理粘包问题)。 |
sendto() |
(UDP) 发送数据包,需指定目标地址。 |
recvfrom() |
(UDP) 接收数据包,同时获取发送方地址。 |
sendmsg() / recvmsg() |
高级收发接口,支持分散/聚集 I/O(如多缓冲区、控制信息)。 |
3. IO复用与异步
接口 |
描述 |
select() |
同步多路复用,监视多个套接字的可读/可写/异常事件(效率随FD数量线性下降)。 |
poll() |
改进版多路复用,无 FD数量限制但仍需遍历所有FD。 |
epoll_create() ,
epoll_ctl() ,
epoll_wait() |
(Linux特有)高性能IO复用,事件驱动模式。 |
kqueue() |
(BSD/macOS特有)类似 epoll的高效IO复用机制。 |
4. UDP专用操作
getsockname()
, getpeername()
, setsockopt()
, getsockopt()
, `ioctl(),
- `fcntl(),
- `gethostbyname(),
- `inet_addr(),
- `htons(),
5.其他辅助函数
//示例:UDP服务器片段
int sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in servaddr;
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(8080);
servaddr.sin_addr.s_addr=INADDR_ANY;
bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
char buffer[1024];
struct sockaddr_in cliaddr;
socklen_t len=sizeof(cliaddr);
recvfrom(sockfd,buffer,sizeof(buffer),0,(struct sockaddr*)&cliaddr,&len);
如果需要更详细的解释或具体场景的代码示例可以告诉我!
内容由零声教学AI助手提供,问题来源于学员提问
本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8201