Socket中send函数的理解
来源:互联网 发布:国外怎么在淘宝买东西 编辑:程序博客网 时间:2024/06/08 20:06
Socket中send函数的理解
int send(SOCKET s,
参数描述:
- SOCKET s
- const char *buf
- int len
- int flags
同步Socket的send函数的执行流程如下:
- 调用该函数时,send先比较待发送数据的长度len与套接字s的发送缓冲区的长度(区别于buf),如果len大于s的发送缓冲区的长度,则函数返回SOCKET_ERROR;
- 如果len小于或者等于s发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲区中的数据:
a. 如果是在发送,就等待协议将数据发送完毕。
如果len大于发送缓冲区剩余空间大小(不足放入剩余发送缓冲区),send就一直 等待协议把s发送缓冲区中的数据发送完;
如果len小于发送缓冲区剩余空间大小,就仅仅把buf中的数据copy到发送缓冲区的剩余空间里(send函数返回时并不代表send把s的缓冲区的数据(buf)传到连接的另一端,而是协议传输的,send仅仅是把buf中的数据copy到s的发送缓冲区的剩余空间中)。
如果send函数copy数据成功,就返回实际copy的字节数,如果send在copy数据时出现错误,那么send就返回SOCKET_ERROR;如果send在等待协议传送数据时断开网络,那么send函数也返回SOCKET_ERROR。
- 要注意send函数把buf中的数据成功copy到s的发送缓冲的剩余空间后就返回了,但是此时这些数据并不一定马上被传到连接的另一端。如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR.(每一个除send之外的Socket函数在执行的最开始总要先等待套接字的发送缓冲区中的数据被协议传送完毕才能继续,如果在等待时出现网络错误,那么该Socket函数就返回SOCKET_ERROR)。
recv函数:
int recv (SOCKET s, char* buf
- SOCKET s
- const char *buf
应用程序存放接收的数据的缓冲区 - int len
- int flags
同步Socket的recv函数的执行流程如下:
- 调用recv函数时,recv先等待s的发送缓冲区中的数据被协议发送完毕:
转自:http://blog.sina.com.cn/s/blog_732784f70100t0ti.html
0 0
- Socket中send函数的理解(一)
- Socket中send函数的理解(一)
- Socket中send函数的理解
- Socket中send函数的理解
- socket中send函数和recv函数的理解
- socket中send和recv函数的阻塞理解
- socket中send和recv函数的阻塞理解
- 理解SOCKET,send函数和bind函数
- 浅谈SOCKET-TCP编程中send函数的机制
- socket网络编程中send函数的解析
- socket中read、write、send、recv函数的比较
- socket中read、write、send、recv函数的比较
- socket中read、write、send、recv函数的比较
- socket中read、write、send、recv函数的比较
- socket中read、write、send、recv函数的比较
- socket中read、write、send、recv函数的比较
- socket中read、write、send、recv函数的比较
- socket编程中send函数引发的线程退出
- Codeforces Round #331 (Div. 2)-Wilbur and Array(贪心模拟)
- CentOS6.5环境下使用镜像文件搭建本地yum源
- android pad上图片放在drawable文件夹下不正确的显示的讨巧的解决方法
- HTML文件中文乱码问题
- LeetCode Ugly Number || DP
- Socket中send函数的理解
- jQueryMobile快速入门
- C++重载,覆盖与隐藏
- JavaScript RegExp对象
- (java)Implement Queue using Stacks
- zabbix安装
- MTStatusBarOverlay —— 在状态栏上显示自定义的View
- 用Excel生成Ansys *VREAD函数所需的具有固定字符长度和小数位数的数据
- Service生命周期和启动方法以及IntentService