socket 通信之 recv函数

recv函数

作用:该函数用于从一个套接字中接收数据。

//表头文件:
#include<sys/types.h>
#include<sys/socket.h>

//函数定义
int ret = recv (int __fd, void *__buf, size_t __n, int __flags)
//fd:从文件描述符fd中读取数据。
//buf:用于接收数据的缓冲区。
//len:缓冲区长度。
//flags:指定调用方式,通常指定为0。

注意:

  1. 如果在读取的过程中出现了网络错误,则会返回错误 SOCKET_ERROR。
  2. 如果是在文件描述符非阻塞的情况下进行数据的读取,当全部的数据读取完毕时,会设置错误号**(注意不是返回)**EAGAIN 或者是 EWOULDBLOCK。
  3. 当返回值大于0时,表示读取到了ret个字节的字符。
  4. 当返回值等于0时,表示客户端(数据发送方断开了连接)。
  5. 当返回值小于0时,则读取数据失败。

下面的案例是往一个readbuf缓冲区不断的读取数据

(假设每次读到的数据小于readbuf,则需要read_idx来标记接下来读取到的数据拼接在readbuf的哪个位置)

// 读取到的字节
int bytes_read = 0;
char readbuf[1024] = {0};

while (true) {
    bytes_read = recv(fd, readbuf + read_idx, 1024 - read_idx, 0);
    if (bytes_read == -1) {
        if (errno == EAGAIN || errno == EWOULDBLOCK) {
            break; //表示没有数据了
        }
   		return false; //遇见其他错误
    } else if (bytes_read == 0) {
        //对方关闭连接
         break; 
    }
    read_idx += bytes_read;     
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值