[Sune B. Woeller] >> ... >> I can see (with the excellent (and free) 'Process >> Explorer' from sysinternals) that the python >> processes always opens port 19999, and connects by >> that port to themselves on another port (for >> instance 2550). [Dieter Maurer] > You can find the relevant code in > "ZServer.medusa.thread.select_trigger.trigger.__init__" > > In principle, the code should try all sockets between > "19999" down to "19950" and fail only when none of them > could be bound to...
Yup. ZODB has what looks like a copy/paste of this code, in ZEO/zrpc/trigger.py. I didn't realize where it came from originally until you pointed out the Medusa code here. Anyway, it so happens I rewrote ZEO's copy a few weeks ago, in ZODB 3.4. The Windows part is much simpler there now. I don't know why the original might fail in the way Sune reported, but perhaps the rewritten version would not. Before: # tricky: get a pair of connected sockets host='127.0.0.1' port=19999 while 1: try: self.address=(host, port) a.bind(self.address) break except: if port <= 19950: raise BindError, 'Cannot bind trigger!' port=port - 1 a.listen (1) w.setblocking (0) try: w.connect (self.address) except: pass r, addr = a.accept() a.close() w.setblocking (1) self.trigger = w After: # Specifying port 0 tells Windows to pick a port for us. a.bind(("127.0.0.1", 0)) connect_address = a.getsockname() # assigned (host, port) pair a.listen(1) w.connect(connect_address) r, addr = a.accept() # r becomes asyncore's (self.)socket a.close() self.trigger = w _______________________________________________ Zope maillist - Zope@zope.org http://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope-dev )