windows tcp stack的缓冲限制,特别是使用winsocket

时间:2014-02-17 16:40:51

标签: windows tcp winsock

在处理通过winsocket进行通信的Windows应用程序时,我已经扼杀了以下场景:

  1. Alice与Bob发起tcp会话
  2. Bob接受,会话成立。
  3. Bob正在发送大量数据(~1000 mb)。
  4. 鲍勃继续做其他事情。
  5. 同时,Alice慢慢读取数据,当时N个字节(其中N是Alice缓冲区的大小,只分配一次,因为数据被写入每次读取的文件中。此缓冲区已分配通过申请)。
  6. 调试时,我发现Bob的send()永远不会阻塞,即使我在第一次读取之前暂停了Alice。

    问题是,什么保证整个数据( ~1000 mb )将保持可供Alice阅读? 是否有已知/可配置的参数限制此缓冲区的长度?

1 个答案:

答案 0 :(得分:1)

Alice有一个套接字接收缓冲区,Bob有一个套接字发送缓冲区。两者都存在于各个插座的寿命中。当Alice的TCP确认时,数据从Bob的缓冲区中删除,而当Alice读取它时,从Alice的缓冲区中删除数据。

相关问题