转载地址:http://www.cnblogs.com/Genesis-007/p/5190552.html

说明: 文中红色部分是我的备注

函数原型:

1

ssize_t recv( int sockfd,? void *buf,? size_t len,? int flags);

该函数第一个参数制定接收端套接字描述符;

第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;

第三个参数指明缓冲区buf的长度;

第四个参数一般置0; (标志位)

recv函数返回其实际copy的字节数(第四个参数为0的时候, 其实是剪切数据, 而不是copy数据)。如果recv在copy时出错,那么它返回SOCKET_ERROR; 如果recv函数在等待协议接收数据时网络中断了,那么它返回0(比如对端close socket);recv函数仅仅是copy数据, 真正的接收数据是协议来完成的(恩, 发送数据要靠协议栈)。

默认recv函数socket 是阻塞的
阻塞与非阻塞recv返回值没有区分(小于0的时候, 会有一点点区别, 如下会说到),都是
<0 出错
=0 连接关闭
>0 接收到数据大小,

特别:返回值<0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的,继续接收。
只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要循环读取)。

返回说明:
a. 成功执行时,返回接收到的字节数。另一端已关闭则返回0。

b. 失败返回-1,errno被设为以下的某个值
EAGAIN:套接字已标记为非阻塞,而接收操作被阻塞或者接收超时
EBADF:sock不是有效的描述词
ECONNREFUSE:远程主机阻绝网络连接
EFAULT:内存空间访问出错
EINTR:操作被信号中断
EINVAL:参数无效
ENOMEM:内存不足
ENOTCONN:与面向连接关联的套接字尚未被连接上
ENOTSOCK:sock索引的不是套接字

c. 当返回值是0时,为正常关闭连接;

Linux网络编程--recv函数返回值详解相关推荐

  1. Python return函数返回值详解

    Python return函数返回值详解 到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束.但实际上,在某些场景中,我们还需函数将处理的结果反馈回来,就好像主管向下级员工下达命令 ...

  2. C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)

    C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...

  3. 函数的返回值,C语言函数返回值详解

    看旋转编码器程序的时候,遇见了一些关于函数返回值的函数,感觉很懵逼,就百度了一下C语言函数调用,感觉写的挺好的, 原链接:http://c.biancheng.net/view/204.html 通常 ...

  4. 网络编程_bind函数返回值

    #define  _WINSOCK_DEPRECATED_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include&l ...

  5. Linux多线程编程-线程函数返回值(返回简单数据类型)

    引言 通过几个实验练习,学习线程之间连接的具体实现.下面列举了两个例子,一个是子线程返回简单数据类型:另一个是子线程返回复杂数据类型. 实现代码 子线程返回简单的数据类型 #include<st ...

  6. C语言return的用法详解,C语言函数返回值详解

    函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过 return 语句返回. return 语句的一般形式为: return 表达式; 或者: return (表达式); 有 ...

  7. C语言函数返回值详解

    函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过 return 语句返回. return 语句的一般形式为: return 表达式; 或者: return (表达式); 有 ...

  8. Linux网络编程-UDP和TCP协议详解

    1|0一. 引言 网络协议是每个程序员都要掌握的基础知识,干啥都离不开网络,就算在家里新买了个路由器不是吗,同事连不上网,你的女朋友手机没有网看剧了正看到高潮部分,到那时候你打开百度......那嫌弃 ...

  9. 【Linux网络编程】IP 数据报格式详解

    IP 数据报首部 TCP/IP 协议定义了一个在因特网上传输的包,称为 IP 数据报 (IP Datagram).这是一个与硬件无关的虚拟包,由首部和数据两部分组成. 首部的前一部分是固定长度,共 2 ...

  10. unix网络编程——ioctl 函数的用法详解

    https://blog.csdn.net/ashlingr/article/details/8227603

最新文章

  1. 解决异常:“The last packet sent successfully to the server was 0 milliseconds ago. ”的办法
  2. 使用C语言来扩展PHP,写PHP扩展dll
  3. linux系统下cpu如何测试,Linux 系统下如何查看CPU个数
  4. WWF系列之----关于Host与WorkflowInstance之间的通讯
  5. 【Java线程安全】一个简单的多线程程序
  6. Oracle数据库定时备份脚本
  7. 日立预计08财年亏损78亿美元 将裁员7千人
  8. js函数引用、函数调用与回调函数
  9. 洛谷P1126 机器人搬重物【bfs】
  10. 51单片机18B20测温1602LCD显示
  11. oracle ||#039; where #039;||condition;,帝国cms后台添加字段提示#039;Row size too large. The maximum row size...
  12. CSS定位 position
  13. 林森---博客园之二,对《闭包》的个人见解!希望能帮到不理解闭包的同学们!...
  14. 11. SpringMVC拦截器(资源和权限管理)
  15. python练习集100题_Python练习集100题
  16. 数学魔鬼表达式——第三天
  17. 银行业务模拟系统(C/C++实现内含详细注释)
  18. Vue学习7-MinUI组件与项目托管到码云上
  19. MySQL数据库相关资料
  20. MySQL连接查询——外连接

热门文章

  1. 12 经络的走向图和说明
  2. 联想Thinkpad sl400 7HC入手感觉
  3. 什么是信道编码?信道编码比较
  4. android 电容屏(一):电容屏基本原理篇
  5. 苹果ipad有哪几款_别再乱买了!一篇文章讲清楚不同型号iPad之间的区别
  6. 【SSH】Spring框架学习
  7. 爱心的数学函数方程_数学里有哪些可以示爱的图像?它们的函数方程又是什么?...
  8. java日记 简单Java家庭记账系统
  9. 43岁读NLP博士,一位70后的励志人生
  10. 语义分割算法汇总(长期更新)