private void ReceiveTask() { var senderAddress = new IPEndPoint(IPAddress.Any, 0); try { while (true) { var data = _client.Receive(ref senderAddress); var message = MessageSerializer.GetMessage(data); if (message != null) { _listener.OnMessageReceived(message, senderAddress); } senderAddress = new IPEndPoint(IPAddress.Any, 0); } } catch (SocketException e) { switch (e.SocketErrorCode) { case SocketError.ConnectionReset: _listener.OnDisconnect(senderAddress); break; default: throw e; } } }