同步Socket Send执行流程

这里只描述同步Socket的send函数的执行流程

当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲 的 长度

如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR

如果len小于或者等于s的发送缓冲区的长度, 那么send先检查协议 是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完           如果协议还没有开始发送s的 发送缓冲中的数据或者s的发送缓冲中没有数据,那么 send就比较s的发送缓冲区的剩余空间和len

如果len大于剩余空间 大小send就一直等待协议把s的发送缓冲中的数据发送完

如果len小于剩余 空间大小send就仅仅把buf中的数据copy到剩 余空间里(注意并不是send把s的发送缓冲中的数据传到连接的另一端的,而是协议传的,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)

 

 

原作者写的有点乱 连在一起 看着很憋屈  就转来整理了一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值