send

函数原型

  • ssize_t send( SOCKET s, const char *buf, size_t len, int flags )

注意事项

  • 待发送数据长度data_len
  • 套接字s的发送缓冲长度buf_len
  • 发送缓冲区剩余空间space_len
if(data_len > buf_len)
return SOCKET_ERROR
else{
if(协议正在发s缓冲中的数据)
等待发送完成
else{
if(data_len > space_len)
等待协议把s的数据发送完
//除send外的socket函数开始前都要等发送缓冲区清空
if(发送时网络断开)
return SOCKET_ERROR
else
if(把buf中的数据复制到剩余空间 == success)
return 实际复制的字节数
//此时数据还没由协议发送到另一端
//等待传输时断网,调用send的进程会收到SIGPIPE
else
return SOCKET_ERROR
}
}

recv

函数原型

ssize_t recv(int s, char *buf, size_t len, int flags)

注意事项

while(s发送缓冲区的数据正在被协议传输)
if(网络错误) return SOCKET_ERROR
while(s接收缓冲区没有数据 || 正在接数据)
continue
if(复制s接收缓冲区数据到buf == success)
if(在等待协议接收数据的时候网络中断)
return 0
else//大于buf的长度就要分多次接收了
return 实际复制的字节数
else
return SOCKET_ERROR

汇总

  • 上面的过程只是为了揭示其中的注意事项,实际实现要复杂更多
  • 从上面的描述可以看出,接收和发送数据的主体都是协议,而不是send和recv
  • 所以才会有send成功了并不代表数据就真的发送到另一端的说法

最新文章

  1. Yii2框架实现计数器功能
  2. CentOS 7部署OpenStack(二)—安装keystone服务
  3. 自动获取MyEcilipse注册名和注册码的方法
  4. hdu 5105 求函数极值 函数求导/三分法
  5. 把时间转成适合符合日常习惯的格式【js】
  6. iOS设备 屏幕尺寸、操作系统、摄像头像素、发行时间 汇总
  7. web.xml配置bug之提示The content of element type "web-app" must match "(icon?,display- name?,description?,distributable?,
  8. Linux管道的实现机制
  9. 基于shiro授权过程
  10. BZOJ 3091 城市旅行
  11. ubuntu 安装jdk7总结
  12. java 抽象(abstract) 构造 静态(static) 总结--2017-03-02
  13. Sql2012数据库还原
  14. flex练习---纵横中文网
  15. 开源 , KoobooJson一款高性能且轻量的JSON框架
  16. Shader 屏幕后期特效 Shake(震屏)&Wave(波纹)
  17. java中去除字符串(String)中的换行字符(\r \n \t)
  18. calayer 的特殊属性整理
  19. 【数据库_Mysql】Mysql知识汇总
  20. "Access restriction: The type BASE64Encoder is not accessible due to restrict"问题解决

热门文章

  1. WebGIS中矢量切图的初步研究
  2. js作用域和变量提升
  3. Winform应用程序实现通用消息窗口
  4. block传值和代理传值的异同点
  5. 《Head First 设计模式》之观察者模式
  6. Windows下程序打包发布时的小技巧
  7. 写出好的 commit message
  8. javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)
  9. C#基础-技术还债2-枚举
  10. Swift控制语句