socket中send函数和recv函数的理解
来源:互联网 发布:mac 配置ant 编辑:程序博客网 时间:2024/03/29 14:39
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的发送缓冲区中的数据被协议发送完毕:
0 0
- socket中send函数和recv函数的理解
- socket中send和recv函数的阻塞理解
- socket中send和recv函数的阻塞理解
- socket中send函数和recv函数
- send()函数的理解和recv()函数
- send()函数的理解和recv()函数
- send()函数的理解和recv()函数
- send()函数的理解和recv()函数
- socket的send和recv函数详解
- socket recv和send函数
- 有关send()和recv()函数的理解
- Socket中send()函数和recv()函数详解
- Socket中send()函数和recv()函数详解
- Socket send函数和recv函数详解
- Socket send函数和recv函数详解
- Socket send函数和recv函数详解
- Socket send函数和recv函数详解
- Socket send函数和recv函数详解
- Ruby簡明教程之方法(Method)介紹
- Ruby中的迭代器詳解
- CSS打造的边框折角效果
- 数组与指针
- 经典算法之Isomorphic Strings
- socket中send函数和recv函数的理解
- 淺談Rails 4 中Strong Parameters機制
- 巧克力爱好者匿名用例图 小组成员:张猛 李轩 张雨 谷雨 韩蕊
- 常见面试之机器学习算法思想简单梳理(进阶版)
- 邮票分你一半
- 第六届蓝桥杯java试题-九数组分数
- 在hadoop2.4集群环境下安装spark
- protocol、category和继承的区别
- 经典算法题之Happy Number