/// <summary> /// Main loop for handling requests on a single proxy connection /// </summary> public void Run() { Status = "Running"; try { while (true) { if (active == false) break; Status = "Waiting for new request"; //Waiting for new request if (GotNewRequest (ClientSocket) == false) break; bool keepAlive = RunRequest (); //Flush the TCP connection, temporarily disable Nagle's algorithm if (keepAlive) { ClientSocket.NoDelay = true; ClientSocket.NoDelay = false; } served += 1; if (keepAlive == false) break; //Cleanup remaining resources request.Dispose (); request = null; } } finally { active = false; proxy.Remove (this); request.NullSafeDispose (); ClientStream.Close (); } }