public Message Receive(TimeSpan timeout) { byte[] bytes; int length; try { #if VERBOSE DebugHelper.Start(); #endif byte[] lengthBytes = _socket.Recv(); length = BitConverter.ToInt32(lengthBytes, 0); if (_bufferManager == null) { bytes = _socket.Recv(); } else { bytes = _bufferManager.TakeBuffer(length); _socket.Recv(bytes, out length); } #if VERBOSE DebugHelper.Stop(" #### Message.Receive {{\n\tBytes={1}, \n\tTime={0}ms}}.", length); #endif } catch { return(null); } if (bytes == null) { return(null); } Message message; #if VERBOSE DebugHelper.Start(); #endif if (_bufferManager == null) { message = ConstructMessage(bytes); } else { message = ConstructMessage(new ArraySegment <byte>(bytes, 0, length), _bufferManager); } message.Headers.To = LocalAddress.Uri; #if VERBOSE DebugHelper.Stop( " #### Message.DeSerialize {{\n\tAction={3}, \n\tBytes={2}, \n\tNow={1:HH-mm-ss:fff}ms, \n\tTime={0}ms}}.", DateTime.Now, length, message.Headers.Action); #endif return(message); }