【发布时间】:2010-06-13 00:07:14
【问题描述】:
拥有一个 Windows IOCP 应用............
我了解,对于异步 i/o 操作(在网络上),缓冲区必须在发送/读取操作期间保持有效。
因此,对于每个连接,我都有一个用于读取的缓冲区。
对于发送,我使用将要发送的数据复制到的缓冲区。发送操作完成后,我会释放缓冲区以便重复使用。
到目前为止还不错,不是什么大问题。
尚不清楚的是你们是如何做到这一点的?
另一件事是,即使以这种方式处理,我的意思是多缓冲区,接收方也可能会被数据淹没(根据经验)。
即使将 SO_RCVBUF 设置为 25MB 也对我的测试没有帮助。
所以我该怎么做?有待发送队列吗?
【问题讨论】:
-
SO_RCVBUF以什么方式没有帮助?使用 UDP,这是一个令人头疼的问题,但使用 TCP - 有什么问题?发送队列也与被淹没的接收方正交。 -
“正交”?我的英语有限,呵呵.. 好吧,我认为“SO_RCVBUF”将允许接收比我的应用程序接收更多的数据,即如果我安排读取 100 字节到缓冲区,但发件人向我发送了 1MB,然后套接字的缓冲区(我用'SO_RCVBUF'设置大小)将被填满。
-
正交 = 垂直 :)
-
TCP 提供 流控制 - (en.wikipedia.org/wiki/…) 如果接收方无法以足够快的速度读取数据以耗尽接收缓冲区,则会减慢快速发送方的速度。
标签: windows networking network-programming buffer