拥有Windows IOCP应用程序............
据我所知,对于异步i / o操作(在网络上),缓冲区必须在发送/读取操作期间保持有效。
因此,对于每个连接,我都有一个用于读取的缓冲区 为了发送,我使用缓冲区来复制要发送的数据。当发送操作完成时,我释放缓冲区,以便可以重复使用。
到目前为止,这很好,而不是一个大问题。
尚不清楚的是你们是怎么做到的?
另一件事是,即使以这种方式拥有东西,我的意思是多缓冲区,接收方也可能被数据淹没(从经验谈起)。
即使将SO_RCVBUF设置为25MB也无助于我的测试
所以我该怎么做?有一个待发队列吗?
答案 0 :(得分:3)
我引用计数每个连接(套接字)和每个操作(缓冲区)结构。这非常有效,可以完美地处理生命周期问题。每次发布重叠操作时,每个连接的引用计数递增,并从池中分配新缓冲区。操作完成后,我处理结果并释放套接字和缓冲区上的引用。如果这是最后一个引用,则清理结构(缓冲区返回池等)。
您可以在我的免费IOCP客户端/服务器框架中查看所有这些内容,该框架可从here下载。