private void ReadPackets(IAsyncResult ar) { var readState = (ReadState)ar.AsyncState; var socket = readState.Socket; var buffer = readState.Buffer; var read = -1; try { read = socket.EndReceive(ar); } catch (Exception) { Console.WriteLine("[DISCONNECT] Client Disconnected from server"); KillSocket(socket); return; } if (read == 0) { if (state == ProxyState.Running) { socket.BeginReceive(readState.Buffer, 0, readState.Buffer.Length, SocketFlags.None, ReadPackets, readState); } return; } var text = Encoding.ASCII.GetString(buffer, 0, read); if (readState.Request != null && !readState.Request.Ended) { text = readState.Request.FullRequest + text; } var request = new ProxyRequest(text); if (request.IsFake) { KillSocket(socket); return; } if (request.Ended && !request.IsFake) { Console.WriteLine(request.ToString()); InternalSend(socket, request); return; } if (request.Ended) { return; } readState.Request = request; Array.Clear(buffer, 0, buffer.Length); if (state == ProxyState.Running) { socket.BeginReceive(readState.Buffer, 0, readState.Buffer.Length, SocketFlags.None, ReadPackets, readState); } }