private void ReceiveLoop() { while (this.isActive) { if (this.socket.Poll(Timeout.Infinite, SelectMode.SelectRead)) { EndPoint remoteEP = new IPEndPoint(this.EndPoint.Address, this.EndPoint.Port); MessageReader message = MessageReader.GetSized(BufferSize); try { message.Length = socket.ReceiveFrom(message.Buffer, 0, message.Buffer.Length, SocketFlags.None, ref remoteEP); } catch (SocketException sx) { message.Recycle(); this.Logger.WriteError("Socket Ex in ReceiveLoop: " + sx.Message); continue; } catch (Exception ex) { message.Recycle(); this.Logger.WriteError("Stopped due to: " + ex.Message); return; } ConnectionId connectionId = ConnectionId.Create((IPEndPoint)remoteEP, 0); this.ProcessIncomingMessageFromOtherThread(message, (IPEndPoint)remoteEP, connectionId); } } }