Send函数:

  在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的那部分数据,并等待对端确认后再返回(接收端只要将数据收到接收缓存中,就会确认,并不一定要等待应用程序调用recv);

  在非阻塞模式下,send函数的过程仅仅是将数据拷贝到协议栈的缓存区而已,如果缓存区可用空间不够,则尽能力的拷贝,返回成功拷贝的大小;如缓存区可用空间为0,则返回-1,同时设置errno为EAGAIN.

  要注意send函数把buf中的数据成功copy到s的发送缓冲的剩余空间里后它就返回了,但是此时这些数据并不一定马上被传到连接的另一端。如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR。

Recv函数:

  阻塞模式下recv会一直阻塞直到接收到数据,非阻塞模式下如果没有数据就会返回,不会阻塞着读,因此需要循环读取。

转载于:https://www.cnblogs.com/jlyg/p/10217741.html

TCP的send与recv函数小结相关推荐

  1. socket的阻塞模式和非阻塞模式(send和recv函数在阻塞和非阻塞模式下的表现)

    socket的阻塞模式和非阻塞模式 无论是Windows还是Linux,默认创建socket都是阻塞模式的 在Linux中,可以再创建socket是直接将它设置为非阻塞模式 int socket (i ...

  2. socket api中send()和recv()函数工作原理与要点

    send()和recv()函数是网络编程中经常使用到的函数,下面详细的比较两者的不同之处 send函数工作原理: send函数只负责将数据提交给协议层. 当调用该函数时,send先比较待发送数据的长度 ...

  3. 非阻塞模式下 SEND 和 RECV 函数的返回值总结

    send 和 recv 函数的各种返回值意义: 返回值 n 返回值含义 大于 0 成功发送 n 个字节 0 对端关闭连接 小于 0( -1) 出错或者被信号中断或者对端 TCP 窗口太小数据发不出去( ...

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

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

  5. linux send与recv函数详解

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

  6. recv函数_第五十二章、send和recv函数

    套接字之间一旦建立了连接,那么就可以传送数据了,上一章我们使用的是标准读写函数read和write,这一章我们再来学习另外两个函数recv和send函数. recv和send函数只能用于套接字,还需要 ...

  7. linux Socket send与recv函数详解

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

  8. 有关send()和recv()函数的理解

    ssize_t send(int sock, const void *buf, size_t len, int flags); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数 ...

  9. 关于SOCKET中send和recv函数工作原理总结

    send函数工作原理: send函数只负责将数据提交给网络协议层. 当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SO ...

  10. TCP通信常用的send,sendto,recv,recvfrom函数详解

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

最新文章

  1. 发布文件打包springboit_程序安装包咋制作的?Qt程序打包三部曲,从应用程序到安装包...
  2. x86 X64指令集之间的关系
  3. 文巾解题455. 分发饼干
  4. UI层调用WCF服务实例(源码)
  5. linux mmap 内存映射【转】
  6. javascript --- [读书笔记] 回流与重绘 前端优化小结
  7. defender 报备_去体育中心游泳碰上竞训怎么办?酒店承接会议业务需要报备吗?部门这样说...
  8. hadoop 概要
  9. 驱动研究日记-内核同步
  10. Atitit. Object-c语言 的新的特性  attilax总结
  11. Qt实现界面滑动切换效果
  12. 拼多多推广没用怎么办?
  13. Spring Cloud Eureka 自我保护机制(EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY)
  14. MATLAB三维绘图(四)绘制特殊的三维图
  15. 噪声种类及Matlab添加噪声
  16. 关于uni-app获取完整的iccid(中间带有字母的iccid)
  17. github上万颗star的21个JAVA(19个Android相关)开发框架,知道多少,用过多少
  18. 严恭敏 matlab,惯性仪器测试与数据分析 [严恭敏 编] 2012年版
  19. ArcGIS基础:相同空间人口图层的人口数量字段转移至小区图层(核心:相交操作)及制作人口密度专题图
  20. 04_Linux软件包管理

热门文章

  1. 结合element-ui封装的一个分页函数
  2. Android Baseline小tip
  3. PAT(乙级)1016
  4. [比赛]2015/12/25BNU新生赛
  5. Appscan计划扫描与扩展程序
  6. 新扬天电脑所配USB键盘功能键驱动问题注意事项
  7. 黑马程序员-Java学习笔记之抽象类,接口,多态和内部类
  8. 使用距离变换的分水岭分割
  9. 最小生成树算法(Prim和Kruskal)
  10. 3D几何图形PS笔刷下载安装