> If you can, I recommend using asynchronous reads on a blocking socket
> instead.  It's a little less weird that way since there isn't an "error"
> that isn't an error.

I do actually have a version of the code that uses asynchronous blocking reads, 
but the problem I found is how to deal correctly with timeout i.e. data not 
being received within a specified time limit. My current solution (using 
asynchronous blocking read) is a little too complex (and therefore potentially 
error prone) for my liking. I couldn't think of an elegant solution to timeout, 
that didn't involve closing the socket. I need the connection to be long lived, 
even after timeout.

Given that, I started looking at non blocking sync read to cope with timeout. 
Knocking something together quickly has massively simplified the code compared 
to the async blocking read.

> Yes, that just means that it has returned as much data as is currently
> available, and the rest has not yet been received yet.  (Thus the error means
> it cannot return more data without blocking.)

I suspected as much, but the documentation wasn't entirely clear in this use 
case.

> The data that was returned from the first read is entirely valid and present 
> in
> the buffer.  It is your responsibility to either copy this elsewhere before 
> your
> subsequent read, or pass a start-of-buffer pointer in your subsequent read
> starting at the point just after the already-read data, so that it doesn't get
> overwritten.  Otherwise you will lose data.

Further testing after sending my original email query, confirmed what you say. 
My problems was because I wasn't doing this right! Does make a scatter-gather 
style read (with multiple buffers) a little more complicated though. Not a big 
deal though for what I'm doing.

I just had a play with trying to get what I wanted using a CompletionCondition, 
but my first attempt failed miserably but for now it doesn't matter.

Thank you for your help.

Keith
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to