On 3 Mag, 05:38, Roy Smith <[EMAIL PROTECTED]> wrote: > In the application I work on, we've avoided this. We just listen on two > separate sockets (one for each address family). We wrote a DualSocket > class which manages the two underlying single-protocol sockets and makes > them appear to be a single dual-protocol socket. It was a lot of user code > to write, compared with using the mapped address mechanism, but at least > it's portable to every OS we've seen that support IPv6. > > You don't need multi-threading to handle multiple sockets. In our > implementation, for example, we use select() in a single thread to > multiplex the two.
I would be very interested in taking a look at how you implemented that part of code. Would it be possible? For now I wrote this and it seems to work just fine. Any advice about it? class FTPServer(asyncore.dispatcher): def __init__(self, address, handler): """Initiate the FTP server opening listening on address. - (tuple) address: the ip:port pair on which to listen for ftp data connections. - (classobj) handler: the handler class to use. """ asyncore.dispatcher.__init__(self) self.handler = handler host, port = address for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res try: self.create_socket(af, socket.SOCK_STREAM) except socket.error, msg: if self.socket: self.socket.close() self.socket = None continue break if not self.socket: raise socket.error, msg self.address_family = af if os.name not in ('nt', 'ce'): self.set_reuse_addr() self.bind(address) self.listen(5) def handle_accept(self): sock_obj, addr = self.accept() log("[]%s:%s Connected." %addr[0:2]) handler = self.handler(sock_obj, self) --- Giampaolo http://code.google.com/p/pyftpdlib/ -- http://mail.python.org/mailman/listinfo/python-list