【发布时间】:2011-03-02 10:47:03
【问题描述】:
这更像是一个设计问题,而不是一个特定的代码问题,我确定我错过了明显的,我只需要另一双眼睛。
我正在编写一个基于 WSAAsyncSelect 的多客户端服务器,每个连接都构成我编写的连接类的一个对象,其中包含相关的设置和缓冲区等。
我的问题涉及 FD_WRITE,我了解它是如何运作的:在建立连接后立即发送一个 FD_WRITE。此后,您应该发送,直到收到 WSAEWOULDBLOCK 为止,此时您将剩余要发送的内容存储在缓冲区中,并等待被告知可以再次发送。
这就是我有问题的地方,我在每个连接对象中使这个保持缓冲区有多大?直到收到新的 FD_WRITE 的时间量是未知的,在此期间我可能会尝试发送很多东西,一直添加到我的传出缓冲区。如果我使缓冲区动态化,内存使用可能会因任何原因而失控,我无法发送()并减少缓冲区。
所以我的问题是您通常如何处理这种情况?请注意,我不是在谈论 winsock 使用的网络缓冲区本身,而是我自己创建的用于“排队”发送的一个。
希望我解释得足够清楚,谢谢大家!
【问题讨论】:
标签: c++ winsock send wsaasyncselect