[Tutor] More network server questions

Kent Johnson kent37 at tds.net
Tue Jun 20 17:39:45 CEST 2006


Tino Dai wrote:
> 
>     so, I think you've to set the allow_reuse_address for the TCPServer and
>     not for the RequestHandler
> Hi there Ewald,
> 
>      I tried that, and still no joy. Now I have:
> 
> class Listener( threading.Thread ):
>         sema = threading.Semaphore()
>         def __init__(self):
>                 self.port=xxxx
>                 self.ipAddr='xxx.xxx.xxx.xxx'
>                 self.wholeFilenameList=[]
>                 threading.Thread.__init__(self)
>                 #print "Done with init"
> 
> 
>         def run(self):
>                 server=SocketServer.TCPServer(('',self.port), FtpServer)
>                 server.allow_reuse_address = 1    <- I moved the 
> server.allow_reuse_adddress from the FtpServer, which was 
> SocketServer.StreamRequestHandler
>                 print "The port is: ", self.port
>                 server.serve_forever()
> 
> 
> Any clue on what I am missing?

Looking at the source code for SocketServer, you have to set 
allow_reuse_address *before* instantiating the server, because the value 
is used by the __init__() method. allow_reuse_address is actuall a class 
attribute, not an instance attribute.

One way to do this is to set the class attribute directly:
SocketServer.TCPServer.allow_reuse_address = 1

This will change the behaviour of any TCPServer created after this 
assignment. If you want to just change the one server you create, make 
your own server subclass and set allow_reuse_address there:

class MyServer(SocketServer.TCPServer):
     allow_reuse_address = True

then instantiate MyServer instead of TCPServer.

Kent



More information about the Tutor mailing list