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