经常使用的 Linux Socket API 函数释义
1. socket()
📖 解释:创建一个新的套接字,返回一个文件描述符用于后续网络通信.
第 1 个参数 🔑:协议族,指定通信协议类型.
- 示例:
AF_INET
(IPv4协议)、AF_INET6
(IPv6协议)、AF_UNIX
(本地进程间通信).
第 2 个参数 🔑:套接字类型,指定通信语义.
- 示例:
SOCK_STREAM
(TCP流式套接字)、SOCK_DGRAM
(UDP数据报套接字).
第 3 个参数 🔑:具体协议,通常为0(使用默认协议).
- 示例:若类型是
SOCK_STREAM
,则默认协议是IPPROTO_TCP
;若类型是SOCK_DGRAM
,默认协议是IPPROTO_UDP
.
返回值 📤:
-
✅ 成功时:返回非负整数(套接字文件描述符).
-
❎ 失败时:返回-1,并设置
errno
(如EACCES
权限不足、EINVAL
参数无效).
2. bind()
📖 解释:将套接字与特定IP地址和端口绑定.
第 1 个参数 🔑:套接字描述符(通过socket()
创建的文件描述符).
第 2 个参数 🔑:地址(指向sockaddr
结构的指针),包含IP和端口.
- 示例:
struct sockaddr_in server_addr
(IPv4地址结构),需填充sin_family
(AF_INET
)、sin_port
(htons(8080)
)、sin_addr
(INADDR_ANY
表示监听所有接口).
第 3 个参数 🔑:地址长度(地址结构的大小).
- 示例:
sizeof(struct sockaddr_in)
.
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如端口已被占用,
errno=EADDRINUSE
).
3. listen()
📖 解释:将套接字设为监听模式,等待客户端连接请求.
第 1 个参数 🔑:套接字描述符(已绑定的套接字).
第 2 个参数 🔑:积压连接数(等待队列的最大长度).
- 示例:5(表示最多允许5个未处理的连接请求).
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如套接字未绑定,
errno=EINVAL
).
4. accept()
📖 解释:接受客户端的连接请求,返回新的套接字用于通信.
第 1 个参数 🔑:监听套接字描述符(通过listen()
设置的套接字).
第 2 个参数 🔑:客户端地址(输出参数,保存客户端地址信息).
- 示例:
struct sockaddr_in client_addr
,调用后填充客户端IP和端口.
第 3 个参数 🔑:客户端地址长度(输入输出参数,传入地址结构大小,返回实际大小).
- 示例:
socklen_t len = sizeof(client_addr);
返回值 📤:
-
✅ 成功时:返回新的套接字描述符(用于与客户端通信).
-
❎ 失败时:返回-1(如系统资源不足,
errno=ENOMEM
).
5. connect()
📖 解释:客户端主动连接服务器.
第 1 个参数 🔑:套接字描述符(客户端通过socket()
创建的套接字).
第 2 个参数 🔑:服务器地址(服务器的IP和端口).
- 示例:
struct sockaddr_in server_addr
,填充sin_family=AF_INET
、sin_port=htons(80)
、sin_addr.s_addr=inet_addr("192.168.1.1")
.
第 3 个参数 🔑:地址长度(地址结构的大小).
- 示例:
sizeof(struct sockaddr_in)
.
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如服务器不可达,
errno=ECONNREFUSED
).
6. send()
📖 解释:通过TCP套接字发送数据.
第 1 个参数 🔑:套接字描述符(已连接的套接字).
第 2 个参数 🔑:缓冲区(发送数据的内存地址).
- 示例:
char *msg = "Hello";
第 3 个参数 🔑:长度(要发送的字节数).
- 示例:
strlen(msg)
.
第 4 个参数 🔑:标志(控制行为,通常为0).
- 示例:0(默认阻塞发送).
返回值 📤:
-
✅ 成功时:返回实际发送的字节数.
-
❎ 失败时:返回-1(如连接断开,
errno=EPIPE
).
7. recv()
📖 解释:通过TCP套接字接收数据.
第 1 个参数 🔑:套接字描述符(已连接的套接字).
第 2 个参数 🔑:缓冲区(接收数据的内存地址).
- 示例:
char buffer[1024];
第 3 个参数 🔑:长度(缓冲区最大容量).
- 示例:
sizeof(buffer)
.
第 4 个参数 🔑:标志(控制行为,通常为0).
- 示例:0(默认阻塞接收,直到有数据到达).
返回值 📤:
-
✅ 成功时:返回实际接收的字节数(若返回0,表示对端关闭连接).
-
❎ 失败时:返回-1(如套接字无效,
errno=ENOTCONN
).
8. sendto()
ssize_t sendto(int 套接字描述符, const void *缓冲区, size_t 长度, int 标志, const struct sockaddr *目标地址, socklen_t 地址长度);
📖 解释:通过UDP套接字发送数据到指定地址.
第 1 个参数 🔑:套接字描述符(UDP套接字).
第 2 个参数 🔑:缓冲区(发送数据的内存地址).
- 示例:
char *msg = "UDP Message";
第 3 个参数 🔑:长度(发送数据的字节数).
- 示例:
strlen(msg)
.
第 4 个参数 🔑:标志(通常为0).
第 5 个参数 🔑:目标地址(目标IP和端口).
- 示例:
struct sockaddr_in server_addr
,填充服务器信息.
第 6 个参数 🔑:地址长度(目标地址结构的大小).
- 示例:
sizeof(struct sockaddr_in)
.
返回值 📤:
-
✅ 成功时:返回实际发送的字节数.
-
❎ 失败时:返回-1(如网络不可达,
errno=ENETUNREACH
).
9. recvfrom()
ssize_t recvfrom(int 套接字描述符, void *缓冲区, size_t 缓冲区长度, int 标志, struct sockaddr *源地址, socklen_t *地址长度);
📖 解释:从套接字接收数据,支持获取发送方地址信息(常用于UDP).
第 1 个参数 🔑:套接字描述符(已绑定的UDP或TCP套接字).
第 2 个参数 🔑:接收缓冲区指针(存储接收到的数据).
第 3 个参数 🔑:缓冲区最大容量(字节).
第 4 个参数 🔑:接收标志(如MSG_PEEK
预览数据、MSG_WAITALL
等待完整数据).
第 5 个参数 🔑:源地址(输出参数,保存发送方地址信息).
第 6 个参数 🔑:地址长度(输入输出参数,传入地址结构大小,返回实际地址长度).
返回值 📤:
-
✅ 成功时:返回实际接收的字节数.
-
❎ 失败时:返回-1(如缓冲区不足,
errno=EINVAL
).
10. sendmsg()
📖 解释:发送复杂消息(支持多缓冲区和辅助数据,如文件描述符传递).
第 1 个参数 🔑:套接字描述符(已连接的TCP或绑定的UDP套接字).
第 2 个参数 🔑:消息结构指针(包含数据缓冲区、地址、控制信息).
第 3 个参数 🔑:发送标志(如MSG_DONTWAIT
非阻塞发送).
返回值 📤:
-
✅ 成功时:返回实际发送的字节数.
-
❎ 失败时:返回-1(如无效参数,
errno=EINVAL
).
11. recvmsg()
📖 解释:接收复杂消息(支持多缓冲区和辅助数据).
第 1 个参数 🔑:套接字描述符.
第 2 个参数 🔑:消息结构指针(输出参数,存储接收的数据和控制信息).
第 3 个参数 🔑:接收标志(如MSG_TRUNC
返回完整数据长度即使截断).
返回值 📤:
-
✅ 成功时:返回实际接收的字节数.
-
❎ 失败时:返回-1(如套接字未连接,
errno=ENOTCONN
).
12. close()
📖 解释:关闭套接字描述符,释放资源.
第 1 个参数 🔑:要关闭的套接字描述符.
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如无效描述符,
errno=EBADF
).
13. shutdown()
📖 解释:关闭套接字的读/写通道或全部通道.
第 1 个参数 🔑:套接字描述符.
第 2 个参数 🔑:关闭方式(SHUT_RD
停读,SHUT_WR
停写,SHUT_RDWR
全停).
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如无效方式,
errno=EINVAL
).
14. setsockopt()
📖 解释:设置套接字选项(如超时、重用地址).
第 1 个参数 🔑:套接字描述符.
第 2 个参数 🔑:协议层(如SOL_SOCKET
通用选项,IPPROTO_TCP
TCP选项).
第 3 个参数 🔑:选项名(如SO_REUSEADDR
地址重用,SO_RCVTIMEO
接收超时).
第 4 个参数 🔑:选项值指针(如int reuse = 1
).
第 5 个参数 🔑:选项值长度(如sizeof(reuse)
).
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如无效选项,
errno=ENOPROTOOPT
).
15. getsockopt()
📖 解释:获取套接字选项的当前值.
第 1 个参数 🔑:套接字描述符.
第 2 个参数 🔑:协议层(同setsockopt
).
第 3 个参数 🔑:选项名(如SO_ERROR
获取错误状态).
第 4 个参数 🔑:选项值指针(输出参数,存储选项值).
第 5 个参数 🔑:选项长度(输入输出参数,传入指针大小,返回实际大小).
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如无效选项,
errno=ENOPROTOOPT
).
16. getsockname()
📖 解释:获取套接字绑定的本地地址.
第 1 个参数 🔑:套接字描述符.
第 2 个参数 🔑:地址结构指针(输出参数,保存本地IP和端口).
第 3 个参数 🔑:地址长度(输入输出参数,传入结构大小,返回实际大小).
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如未绑定地址,
errno=EINVAL
).
17. getpeername()
📖 解释:获取已连接套接字对端的地址信息.
第 1 个参数 🔑:已连接的套接字描述符(如accept返回的描述符).
第 2 个参数 🔑:地址结构(输出参数,保存对端IP和端口).
- 示例:
struct sockaddr_in peer_addr;
第 3 个参数 🔑:地址长度(输入输出参数,传入结构大小,返回实际大小).
- 示例:
socklen_t len = sizeof(peer_addr);
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如未连接套接字,
errno=ENOTCONN
).
18. ioctl()
📖 解释:对文件描述符执行设备输入/输出操作(常用于设置套接字选项).
第 1 个参数 🔑:文件描述符(如套接字描述符).
第 2 个参数 🔑:请求码(指定操作类型,如FIONBIO
设置非阻塞模式).
第 3 个参数 🔑:可变参数(根据请求码传入参数,如int *非阻塞标志
).
- 示例:
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如无效请求码,
errno=EINVAL
).
19. fcntl()
📖 解释:对文件描述符执行控制操作(如设置非阻塞模式).
第 1 个参数 🔑:文件描述符(如套接字描述符).
第 2 个参数 🔑:命令(如F_GETFL
获取标志,F_SETFL
设置标志).
第 3 个参数 🔑:可选参数(如标志位O_NONBLOCK
).
- 示例:
返回值 📤:
-
✅ 成功时:返回依赖命令(如
F_GETFL
返回标志值). -
❎ 失败时:返回-1(如无效命令,
errno=EINVAL
).
20. select()
📖 解释:同步I/O多路复用,监控多个文件描述符状态.
第 1 个参数 🔑:监控的最大文件描述符值+1(如max_fd+1
).
第 2-4 个参数 🔑:读/写/异常集合(使用FD_SET
宏设置,返回就绪的描述符).
- 示例:
第 5 个参数 🔑:超时时间(NULL
表示无限等待,timeval
结构指定秒/微秒).
返回值 📤:
-
✅ 成功时:返回就绪的描述符总数.
-
❎ 失败时:返回-1(如中断,
errno=EINTR
).
21. poll()
📖 解释:类似select
,但使用数组结构管理描述符.
第 1 个参数 🔑:pollfd
结构数组(包含描述符、事件、返回事件).
- 示例:
第 2 个参数 🔑:数组元素数量(如sizeof(fds)/sizeof(fds[0])
).
第 3 个参数 🔑:超时时间(毫秒,-1表示无限等待).
返回值 📤:
-
✅ 成功时:返回就绪的描述符数量.
-
❎ 失败时:返回-1(如无效参数,
errno=EFAULT
).
22. epoll_create()
📖 解释:创建epoll实例(内核事件表).
第 1 个参数 🔑:事件表大小(Linux 2.6.8+忽略此值,建议填0).
返回值 📤:
-
✅ 成功时:返回epoll文件描述符.
-
❎ 失败时:返回-1(如权限不足,
errno=EPERM
).
23. epoll_ctl()
📖 解释:注册/修改/删除epoll事件.
第 1 个参数 🔑:epoll描述符(由epoll_create
返回).
第 2 个参数 🔑:操作类型(EPOLL_CTL_ADD
添加,EPOLL_CTL_MOD
修改,EPOLL_CTL_DEL
删除).
第 3 个参数 🔑:目标描述符(如套接字描述符).
第 4 个参数 🔑:事件结构(指定监听事件如EPOLLIN
).
- 示例:
struct epoll_event ev;
ev.events = EPOLLIN;
ev.data.fd = sockfd;
epoll_ctl(epfd, EPOLL_CTL_ADD, sockfd, &ev);
返回值 📤:
-
✅ 成功时:返回0.
-
❎ 失败时:返回-1(如描述符已存在,
errno=EEXIST
).
24. epoll_wait()
📖 解释:等待epoll事件就绪.
第 1 个参数 🔑:epoll描述符(由epoll_create
返回).
第 2 个参数 🔑:事件数组(保存就绪事件).
- 示例:
第 3 个参数 🔑:最大事件数(如数组长度10).
第 4 个参数 🔑:超时时间(毫秒,-1表示无限等待).
返回值 📤:
-
✅ 成功时:返回就绪事件数量.
-
❎ 失败时:返回-1(如中断,
errno=EINTR
).
Generated by Qwen2.5-Max + QwQ-32B-Preview.