头文件:

#include <sys/socket.h>
ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);
ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);

recv 和send的前3个参数等同于read和write。

send函数:将数据发送到内核发送缓冲区中。

1、如果send检查到要发送的字节数大于发送缓冲区的长度直接返回SOCKET_ERROR.

2、内核缓冲区剩余空间>发送字节数,如果此时内核缓冲区正在发送数据则等待发完,再继续发送;如果发送缓冲区没有正在发送数据,则直接发送。

3、内核缓冲区剩余空间<发送字节数,则send阻塞等待内核发送缓冲区的数据发送完,再发送当前字节。

4、send函数即使将数据成功送进发送缓冲区,单不代表能够成功将数据发送出去,如果此时数据还没发送,网络断掉,那么下一个send直接返回SOCKET_ERROR.与此同时,数据保留。

5、send函数发现发送缓冲区的数据正在发送,那么它会在此等待数据传完,如果数据还没传完,网络中断,send立刻返回SOCKET_ERROR。为什么send会立刻返回SOCKET_ERROR,那是因为UNIX系统一旦发现网络断开,会向调用send的进程发送信号SIGPIPE,即终止进程。

send函数返回值:如果send函数copy成功,返回copy进去的实际字节数。

recv函数:将数据接收到内核的接收缓冲区。其特点:先关心发送缓冲区是否有数据发送。

1、如果调用recv函数的此时此刻,发现发送缓冲区正在传送数据,则等待发送缓冲区发完,如果发送过程中网络断开,recv函数直接返回SOCKET_ERROR.

2、如果调用recv函数的此时此刻,发送缓冲区已经发完,网络也正常。recv会先检查socket的接收缓冲区没有数据或者协议正在接收数据,那么recv就一直等待,直到把数据接收完毕。接收缓冲区将数据接收完后,将数据copy到指定的buff中,如果buff的长度小于接收缓冲区接收的数据长度,那么需要多次recv数据。

recv函数返回值:返回接收之后copy到buff的字节数。因此,一次recv返回不一定能够将接收缓冲区的数据全部copy出来。

网络编程1之send、recv函数详解相关推荐

  1. send(),recv()函数详解

    1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP ...

  2. linux内核中send与recv函数详解

    Linux send与recv函数详解 1.简介 #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t n ...

  3. linux send与recv函数详解

    linux send与recv函数详解 1 #include <sys/socket.h> 2 ssize_t recv(int sockfd, void *buff, size_t nb ...

  4. linux Socket send与recv函数详解

    转自:http://www.cnblogs.com/blankqdb/archive/2012/08/30/2663859.html linux send与recv函数详解 1 #include &l ...

  5. linux socket send函数和recv函数详解以及修改缓冲区大小

    一.send/recv详解 1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程 ...

  6. Java网络编程(6)NIO - Channel详解

    前言 NIO的三个核心组件:Buffer.Channel.Selector Java网络编程(4)NIO的理解与NIO的三个组件完成了大概的了解 Java网络编程(5)NIO - Buffer详解详细 ...

  7. 【Socket网络编程】17. recv() 函数详解

    recv函数 int recv( SOCKET s, char *buf, int len, int flags); 参数说明 第一个参数指定接收端套接字描述符: 第二个参数指明一个缓冲区,该缓冲区用 ...

  8. socket编程---send函数recv函数详解

    一.send函数 函数原型:int send( SOCKET s,char *buf,int len,int flags ); 功能:不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端 ...

  9. Socket send函数和recv函数详解

    1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP ...

  10. Socket中send()函数和recv()函数详解

    目录 1.send函数 2.recv函数 关于socket的send和recv的超时设置 1.send函数 int send( SOCKET s, const char FAR *buf, int l ...

最新文章

  1. js回调与异步加载的用法
  2. 人群分析--ResnetCrowd: A Residual Deep Learning Architecture
  3. MATLAB数学计算与工程分析范例教程,MATLAB数学计算与工程分析范例教程
  4. java使用ajax异步刷新_Jquery的Ajax实现异步刷新
  5. SPOJ-OPTM Optimal Marks ★★(按位建图 最小割)
  6. SpringCloud微服务:阿里开源组件Nacos,服务和配置管理
  7. jQuery formValidator 表单校验插件4.1.1高仿网易邮箱注册页面(已发演示链接)
  8. docker springboot读取配置文件_Docker从入门到掉坑(三):容器太多,操作好麻烦
  9. 获取css selector,selenium的css selector元素获取方式
  10. 22. DOM 简介
  11. 阵列matlab程序,阵列信号处理的理论和应用 原书matlab 程序.rar
  12. 如何将html转换成url,HTML URL
  13. TIA博途中如何设置不需要初始化DB块也可以下载?
  14. Mob研究院 · BAT数据洞察报告
  15. Android Camera高级特性——手动对焦
  16. 使用前端js代码开发了一个图片转ico图标的功能
  17. Android 工作记录1 有关界面和快捷操作的
  18. 二阶常系数线性微分方程的解法
  19. 五大创新技术成就秦淮“绿色翘楚”
  20. 跑分软件测试原理,各大跑分软件测试骁龙710和麒麟710的性能,结果你绝对想不到...

热门文章

  1. 拼音输入法技巧-智能ABC
  2. python图像文字识别 - PyTesser
  3. 【君思智慧园区】物业管理系统解决方案
  4. DEFCON 23|利用U盘60秒打开保险柜
  5. Caddy服务器代理
  6. 要如何给PDF解密?这几个操作简单的方法可以试试
  7. 比鲁大师好的测试电脑软件,电脑跑分软件哪个好?好用的电脑跑分软件盘点
  8. 大容量网盘才是王道?看看坚果云这类的小容量网盘的生存之道
  9. 韩顺平老师php从入门到精通149讲
  10. 快速排序实验报告 c语言,快速排序算法的C语言实现