Я работаю над простым отладочным прокси-сервером. Кажется, все работает нормально, за исключением того, что 70% запросов фактически обрабатываются, а в остальных я получаю странные данные.
У меня есть 3 функции:
private static void Listen(Object obj)
{
log("**** Listen()");
TcpListener listener = (TcpListener)obj;
try
{
while (true)
{
TcpClient client = listener.AcceptTcpClient();
while (!ThreadPool.QueueUserWorkItem(new WaitCallback(ProxyServer2.ProcessClient), client)) ;
}
}
catch (ThreadAbortException) { MessageBox.Show("ABORT EX"); }
catch (SocketException) { MessageBox.Show("SOCKET EX"); }
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
private static void ProcessClient(Object obj)
{
log("**** ProcessClient");
TcpClient client = (TcpClient)obj;
try
{
DoHttpProcessing(client);
}
catch (Exception ex)
{
log(ex.Message);
}
finally
{
client.Close();
}
}
private static void DoHttpProcessing(TcpClient client)
{
log("**** DoHttpProcessing");
// handle all the http stuff
}
Здесь начинается странная часть. Когда я делаю запрос через прокси, запрос выполняется и возвращается, когда я делаю это во второй раз, я получаю последние 10-30 байт, возвращенные из предыдущего запроса.
Самое странное, что когда я получаю эти байты мусора, DoHttpProcessing НЕ запускается (что не имеет смысла, так как содержит потоки, которые отправляют ответ браузеру). Что-то отправляет обратно мусорные данные ... но что?
Похоже, что браузер пытается получить новый запрос, используя то же старое соединение? Это возможно?
После запуска DoHttpProcessing все потоки закрываются, поэтому я не понимаю, как сервер может использовать старое соединение и получить эти данные мусора!?!