private bool Handler(string method, string uri, HttpHeaders headers, SocketReader reader, Socket socket)
        {
            if (_handlers.Count == 0)
            {
                return(false);
            }

            string path, querystring;
            int    qindex = uri.IndexOf('?');

            if (qindex < 0)
            {
                path        = uri;
                querystring = null;
            }
            else
            {
                path        = uri.Substring(0, qindex);
                querystring = qindex == (uri.Length - 1) ? "" : uri.Substring(qindex + 1);
            }

            MemoryStream requestBodyStream = new MemoryStream();

            byte[] buffer = new byte[8192];
            int    bytesRead;

            while (0 != (bytesRead = reader.Read(buffer, 0, buffer.Length)))
            {
                requestBodyStream.Write(buffer, 0, bytesRead);
            }
            requestBodyStream.Seek(0, SeekOrigin.Begin);

            Stream readOnlyRequestBodyStream = new ReadOnlyStream(requestBodyStream);

            readOnlyRequestBodyStream.Seek(0, SeekOrigin.Begin);

            Request  request  = new Request(method, path, querystring, headers, readOnlyRequestBodyStream);
            Response response = new Response(new MemoryStream());

            if (StartFilter.Filter(request, response))
            {
                response.Stream.Seek(0, SeekOrigin.Begin);
                StreamHelper.Transfer(response.Stream, new SocketStream(socket, false));
                return(true);
            }
            return(false);
        }