学习TCP阻塞/非阻塞

不管是阻塞还是非阻塞模式,send(...)返回的数据长度,只是表示拷贝到协议栈缓冲区中的数据长度,并不是实际发送的数据量或对方接收的数据量。对于recv(...),只是从缓冲区中获取接收到的数据。发送方先将数据拷贝到协议栈缓冲区,tcp会保证缓冲区中的数据发送到接收方的缓冲区。至于数据如何可靠的到达,底层协议已经给我们做了很多工作,上层的应用程序不用考虑。

阻塞与非阻塞,相对于底层协议来说没有太大的区别(我现在是这么认为的),如果是阻塞模式,send的时候会将要发送的数据拷贝到缓冲区中,如果缓冲区的容量无法容纳要发送的数据,就等待缓冲区中的数据发送,直到缓冲区可以容纳数据为止,然后方法返回。而非阻塞模式,如果缓冲区的容量无法容纳要发送的数据,它先把缓冲区真满,直接返回填入到缓冲区中的数据长度。

 

一些不错的文章:

Linux下面socket编程的非阻塞TCP研究

关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题

socket阻塞和非阻塞的区别

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值