缓冲区管理套接字应用的最佳实践

时间:2010-06-13 00:07:14

标签: windows networking network-programming buffer

拥有Windows IOCP应用程序............

据我所知,对于异步i / o操作(在网络上),缓冲区必须在发送/读取操作期间保持有效。

因此,对于每个连接,我都有一个用于读取的缓冲区 为了发送,我使用缓冲区来复制要发送的数据。当发送操作完成时,我释放缓冲区,以便可以重复使用。

到目前为止,这很好,而不是一个大问题。

尚不清楚的是你们是怎么做到的?

另一件事是,即使以这种方式拥有东西,我的意思是多缓冲区,接收方也可能被数据淹没(从经验谈起)。
即使将SO_RCVBUF设置为25MB也无助于我的测试 所以我该怎么做?有一个待发队列吗?

1 个答案:

答案 0 :(得分:3)

我引用计数每个连接(套接字)和每个操作(缓冲区)结构。这非常有效,可以完美地处理生命周期问题。每次发布重叠操作时,每个连接的引用计数递增,并从池中分配新缓冲区。操作完成后,我处理结果并释放套接字和缓冲区上的引用。如果这是最后一个引用,则清理结构(缓冲区返回池等)。

您可以在我的免费IOCP客户端/服务器框架中查看所有这些内容,该框架可从here下载。

相关问题