Hi,

I'm sending data from one process to another using a tcp connection. Sender use 
scatter-gather to send the data using 3 buffers (total just over 2000 bytes). 
The reader uses 2 separate sync reads to read the data (using the asio free 
function read()) using a non blocking socket.

Sometimes everything is fine, the 2 reads return the amount of data requested, 
but sometimes I see strange behaviour. I'm trying to work out whether I am 
doing something wrong, or whether I've stumbled across a bug.

When it goes wrong for me, the second read always returns less data than I 
requested, along with the error code 'would_block'. I then loop, performing 
further reads (using the same buffer as before), eventually (one read, or 
multiple reads later) the read function returns the remainder of the data, but 
still with the error code 'would_block' set. However, when I check the contents 
of the buffer, it is not what I expected. I think, but haven't been able to 
confirm, that the start of the buffer is not the start of the data.

1. Is it expected that the read() free function, when the socket is non 
blocking, can return less data than requested, along with the error code 
'would_block'?
2. If it is expected, does the buffer passed in subsequent reads have to be 
adjusted to read only the remaining about of data?
3. If the buffer does have to be changed to only read what is left, how does 
this work with scatter-gather reads using multiple buffers?

As a little bit of extra info, I confirmed using tcpdump that the correct data 
is sent/received, although it arrives in 2 chunks (MTU size of 1500). This is 
on Linux using Boost 1.73.0.

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

Reply via email to