private void ClientReceiveCallback(IAsyncResult ar) { try { if (clientSocket == null) { return; } #if DEBUG_PROXY Trace.WriteLine("[DEBUG] Proxy [ClientReceiveCallback]"); #endif int count = clientSocket.EndReceive(ar); if (count <= 0) { throw new Exception("Connection lost."); } clientInMessage.Size = clientInMessage.ReadHead() + 2; int read = 2; while (read < clientInMessage.Size) { count = clientSocket.Receive(clientInMessage.Buffer, read, clientInMessage.Size - read, SocketFlags.None); if (count <= 0) { throw new Exception("Connection lost."); } read += count; } ParseClientMessage(); clientInMessage.Reset(); clientSocket.BeginReceive(clientInMessage.Buffer, 0, 2, SocketFlags.None, ClientReceiveCallback, null); } catch (Exception ex) { #if DEBUG_PROXY Trace.WriteLine("[DEBUG] Proxy [ClientReceiveCallback] " + ex.Message); #endif Restart(); } }