recv

经socket接收数据

头文件

#include < socket.h >

函数原型

ssize_t recv(int sockfd, void *buff, size_t len, inf flags)
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

函数说明

flags 一般设置为0

flags 说明 recv send
MSG_DONTROUTE 绕过路由表查找 否 | 是
MSG_DONTWAIT 仅本操作非阻塞
MSG_OOB 发送或接收带外数据
MSG_PEEK 窥看外来消息
MSG_WAITALL 等待所有数据

MSG_DONTROUTE 本标志告知内核目的主机在某个直接连接的本地网络上,因而无需执行路由表查找。

MSG_DONTWAIT 该标志在无需打开相应套接字的非阻塞标志的前提下,把单个IO操作临时指定为非阻塞,接着执行io操作,然后关闭非阻塞标志。

MSG_WAITALL强迫接收到len大小的数据后才能返回,除非有错误或信号产生。 MSG_NOSIGNAL此操作不愿被SIGPIPE信号中断

返回值

成功返回读入成功的字节数,失败返回-1 错误码存放在errno中

错误码

EBADF 参数s非合法的socket处理代码
EFAULT 参数中有一指针指向无法存取的内存空间
ENOTSOCK 参数s为一文件描述词,非socket。
EINTR 被信号所中断
EAGAIN 此动作会令进程阻断,但参数s的socket为不可阻断
ENOBUFS 系统的缓冲内存不足
ENOMEM 核心内存不足
EINVAL 传给系统调用的参数不正确

文档更新时间: 2021-02-28 21:51   作者:周国强