Hi all,

I am currently working on a HTTP Proxy. For maximum flexibility, I am implementing the proxy at a low level : I am using the SocketServer library.

The server itself is very simple:

class MyTCPServer(SocketServer.TCPServer):
    allow_reuse_address = 1

and the handler looks like:

class MyTCPHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        # Prints ip and port
        print "\n####  " + str(self.client_address) + " ####"

        requestParser = HTTPRequestParser()

        while True:
            # Get packet
            data = self.request.recv(4096)

            if data == '':
                break

            # Parse request packet
            if requestParser.got_new_chunk(data):
                break

        someStuff = ""
        self.request.send(someStuff)


This is working fine, but I have a small performance issue.
The proxy is targeted by Firefox. Sometimes the first receive call on the input socket takes a lot of time (up to 20s sometimes), which should not be as this is a communication of two local sockets. This is occurring maybe every 30 requests or so.

When looking at the logs I noticed that this weird behavior happens when the client port is not contiguous to the previous ones. For example, handling the fourth request takes a lot of time:

####  ('127.0.0.1', 49704) ####
####  ('127.0.0.1', 49705) ####
####  ('127.0.0.1', 49706) ####
####  ('127.0.0.1', 49674) ####


Do you have any idea what the problem could be ? I tried to manually close self.request request, but I still have the problem. Is it related to "allow_reuse_address = 1" ?

Thanks for your help !

Rémi
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to