private void Receive() { while (IsReceiveThreadOn) { if (!IsConnected) { throw new Exception("From receive thread: disconnected"); } lock (_receiveLocker) { if (Socket.Available > 0) { try { var count = _receiveBuffer.Writer.GetHowManyCountCanWriteInThisBlock(); var length = Socket.Receive(_receiveBuffer.Writer.Node.Value, _receiveBuffer.Writer.Position, count, SocketFlags.None); _receiveBuffer.Writer.MovePosition(length); var bytes = _receiveBuffer.ReadAllBytes(); SocketReceiveEvent(bytes); } catch (Exception e) { throw new Exception(e.ToString()); } } } } }
private void EndReceive(IAsyncResult ar) { var socket = ar.AsyncState as Socket; AssertThat.IsNotNull(socket); int length = socket.EndReceive(ar); receiveBuffer.Writer.MovePosition(length); var bytes = receiveBuffer.ReadAllBytes(); SocketReceiveEvent(bytes); if (length > 0) { Receive(); } }
private void EndReceive(IAsyncResult ar) { var socket = ar.AsyncState as Socket; Assert.NotNull(socket, "Socket is null when receive end"); int length = socket.EndReceive(ar); _receiveBuffer.Writer.MovePosition(length); var bytes = _receiveBuffer.ReadAllBytes(); SocketReceiveEvent(bytes); if (length > 0) { Receive(); } }