当前位置:  技术问答>linux和unix

非阻塞方式socket send()返回大小和实际发送大小不一致

    来源: 互联网  发布时间:2017-04-26

    本文导语:  本帖最后由 JERRY_PRI 于 2013-09-18 11:39:28 编辑 碰到一个网络问题,发现tcp方式在非阻塞模式下,send的返回大小和实际发送大小不一致,设置增加发送缓冲区大小之后也没有好用,按tcp的理论应该是写到缓冲区,然后tcp...

本帖最后由 JERRY_PRI 于 2013-09-18 11:39:28 编辑
碰到一个网络问题,发现tcp方式在非阻塞模式下,send的返回大小和实际发送大小不一致,设置增加发送缓冲区大小之后也没有好用,按tcp的理论应该是写到缓冲区,然后tcp自动分片,当缓冲区不够的时候返回实际写入的大小,测试后发现不是这种情况,跪求各位大侠指点一二~~

|
完全是正常现象,send返回值小于发送值是异步网络编程基础常识。

异步网络发送数据,必须有一个应用层缓冲区,对于SendMessage这种应用层接口,其实现逻辑:

1,如果buffer空,则调用send发送。
2,如果buffer不空,则直接把数据追加到buffer尾部。
3,如果send返回值小于请求值或者返回-1(EAGAIN/EINTR),那么将剩余数据存入buffer,并设置write事件。
4,write事件触发则将buffer中的数据send出去,如果send后buffer为空则取消write事件,否则保持。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下read函数默认到底是阻塞的还是非阻塞的?
  • 如何从阻塞式的read中取得阻塞了多少时间?
  • Select() 是否只能在非阻塞IO里使用,在阻塞IO里可以使用吗?
  • 请教sleep和pthread_delay_np:阻塞线程/阻塞进程?
  • recvfrom函数,已经设置好非阻塞模式,是否还存在阻塞的风险?
  • 怎么解除recvfrom阻塞的阻塞状态
  • linux 如何用SOCKET设置函数设置阻塞和非阻塞?
  • .net/c#/asp.net iis7站长之家
  • 请教:线程中调用一个阻塞的方法后,进程及其它线程会阻塞么?
  • linux C socke编程 创建的socket默认是阻塞的还是非阻塞的?
  • 怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没有数据就会阻塞住???
  • 什么是非阻塞啊?我用下面的程序设计的,用非阻塞和不用都一样啊?
  • 初级问题,socket(AF_INET, SOCK_STREAM, 0)是阻塞式还是非阻塞式?
  • 请问:我发现在linux上的网络编程时, 若客户端连不上服务端,就会阻塞,但如果是在UNIX上,若连不上,会马上返回,并不阻 塞,怎样让它也能阻塞啊?
  • 关于《Unix网络编程》在ubuntu 8.04下运行的问题,服务器端阻塞在accept调用,客户端阻塞在connect调用,导致连接失败
  • 关于socket编程中阻塞的问题
  • linux fwrite 阻塞问题
  • 关于非阻塞I/O
  • 如何判断一个线程是否处于阻塞状态
  • 关于fread是否会阻塞的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,