bool CompleteReadBytes(IAsyncResult result) { int bytesRead = channel.EndSocketReceive(result); bytesReadTotal += bytesRead; if (bytesRead == 0) { if (size == 0 || !throwOnEmpty) { channel.bufferManager.ReturnBuffer(this.buffer); this.buffer = null; return(true); } else { throw new CommunicationException("Premature EOF reached"); } } while (bytesReadTotal < size) { IAsyncResult socketReceiveResult = channel.BeginSocketReceive(buffer, bytesReadTotal, size - bytesReadTotal, OnReadBytes, this); if (!socketReceiveResult.CompletedSynchronously) { return(false); } } return(true); }