Details
Description
Before we get more data by doing refill in the THttpTransport::readMoreData(), we need to check whether we have already the entire content in the buffer (fetched in the last ::recv in TSocket::read() while processing the previous chunk). Doing refill without this check may lead to calling ::recv even though all chunks (the entire content) are already in the buffer. The effect of this is that the call fails either with a false positive timeout or blocks in recv if no timeout is configured.
Attached is the suggested patch and tcpdump pcap (you can clearly see there that we wait for more data although we have already ACKed the last piece of byte - tcp.stream eq 26).