Winsock WSAAsyncSelect sending without an infinite buffer
Posted
by Xexr
on Stack Overflow
See other posts from Stack Overflow
or by Xexr
Published on 2010-06-10T23:35:13Z
Indexed on
2010/06/10
23:43 UTC
Read the original article
Hit count: 297
Hi,
This is more of a design question than a specific code question, I'm sure I am missing the obvious, I just need another set of eyes.
I am writing a multi-client server based on WSAAsyncSelect, each connection is made into an object of a connection class I have written which contains associated settings and buffers etc.
My question concerns FD_WRITE, I understand how it operates: One FD_WRITE is sent immediately after a connection is established. Thereafter, you should send until WSAEWOULDBLOCK is received at which point you store what is left to send in a buffer, and wait to be told that it is ok to send again.
This is where I have a problem, how large do I make this holding buffer within each connections object? The amount of time until a new FD_WRITE is received is unknown, I could be attempting to send a lot of stuff during this period, all the time adding to my outgoing buffer. If I make the buffer dynamic, memory usage could spiral out of control if for whatever reason, I am unable to send() and reduce the buffer.
So my question is how do you generally handle this situation? Note I am not talking about the network buffer itself which winsock uses, but one of my own creation used to "queue" up sends.
Hope I explained that well enough, thanks all!
© Stack Overflow or respective owner