SOCKET的send recv流程

send函数

int send(SOCKET s,  const char *buf,    int len,    int flags);

参数描述:

  • SOCKET s         发送端套接字描述符
  • const char *buf  应用程序要发送的数据的缓冲区(想要发送的数据)
  • int len          实际要发送的字节数
  • int flags        一般置为0即可
检查buf长度是否大于socket缓冲区长度,是,返回SOCKET_ERROR
1)如果TCP正在发送数据,等待发送完成。如果等待过程中网络断开,返回SOCKET_ERROR

2)没有数据发送, 发送数据buf len 大于socket缓冲区剩余空间 a)同步   等待发送缓冲区数据全部发送完成,buf数据copy到缓冲区  b)非阻塞返回SOCKET_ERROR
                                发送数据buf len小于socket缓冲区剩余空间,把buf数据拷贝到socket剩余发送缓冲区,如果copy出现错误 返回SOCKET_ERROR    

      数据被拷贝到socket缓冲区,并不代表已经发送到接受端。如果发送数据的过程当中网络异常。下一个socket操作返回SOCKET_ERROR

      除了send以外的操作都需要等待发送缓冲区的的数据发送完成才能操作


recv函数:

 int recv (SOCKET s, char* buf   ,int len,   int flags);参数描述:

  • SOCKET s         发送端套接字描述符
  • const char *buf  应用程序存放接收的数据的缓冲区
  • int len          buf的长度
  • int flags        一般置为0即可

1)如果tcp在发送数据,等待发送缓冲区的数据全部发送完成。发送过程当中网络异常返回SOCKET_ERROR
2)socket接收缓冲区有数据,把数据取到buf当中,如果一次取不完分多次取
      socket接收缓冲区没有数据或者TCP正在接受数据,a)同步情况下等待TCP接收到数据,接收成功返回接收字节数。网络断开发挥0
                                                                                              拷贝错误返回SOCKET_ERROR
                                                                                        
                                                                                        b)异步情况下返回SOCKET_ERROR                             
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值