private void ProcessRequestWorker(object parm) { SocketWrapperBase sock = (SocketWrapperBase)parm; var et = Environment.TickCount; try { var client = (sock.RemoteEndPoint as IPEndPoint).Address; lock (m_clients) { if (!m_clients.Contains(client)) { if (m_clients.Count >= m_maxConnections) { var errorHandler = new DefaultWorkerRequest(sock, m_logProvider); HttpRuntime.ProcessError(errorHandler, HttpErrorCode.Forbidden, "Maximum Connections Exceeded"); return; } else { m_clients.Add(client); } } } ThreadPool.QueueUserWorkItem(delegate { try { HttpWorkerRequest wr = new AsyncWorkerRequest(sock, m_logProvider); HttpRuntime.ProcessRequest(wr, m_logProvider); } catch (Exception ex) { string text = string.Format("HttpRuntime.ProcessRequest thread threw {0}: {1}", ex.GetType().Name, ex.Message); m_logProvider.LogPadarnError(text, null); } finally { lock (m_clients) { m_clients.Remove(client); } } }); } catch (Exception ex) { string text = string.Format("HttpRequestListener.ProcessRequest threw {0}: {1}", ex.GetType().Name, ex.Message); m_logProvider.LogPadarnError(text, null); } finally { et = Environment.TickCount - et; } }