- apply patch from Greg Smith which sets the port for outbound connections so they come from a predictable port. - copy code from bittorrent which sets IP_TOS ... but fix the bitfield -- bittorrent accidentially uses 0x20 which is the reverse of the correct 0x8... 0x8 is IPTOS_THROUGHPUT. -dean diff -ru bittornado-0.3.7/BitTornado/SocketHandler.py bittornado-0.3.7.dg2/BitTornado/SocketHandler.py --- bittornado-0.3.7/BitTornado/SocketHandler.py 2004-07-10 12:28:58.000000000 -0700 +++ bittornado-0.3.7.dg2/BitTornado/SocketHandler.py 2004-12-05 17:44:26.000000000 -0800 @@ -142,7 +142,7 @@ if k.socket is not None: self._close_socket(k) - def bind(self, port, bind = '', reuse = False, ipv6_socket_style = 1, upnp = 0): + def bind(self, port, bind = '', reuse = True, ipv6_socket_style = 1, upnp = 0): port = int(port) addrinfos = [] self.servers = {} @@ -173,6 +173,10 @@ if reuse: server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.setblocking(0) + try: + server.setsockopt(socket.IPPROTO_IP, socket.IP_TOS, 8) + except: + pass server.bind(addrinfo[4]) self.servers[server.fileno()] = server if bind: @@ -203,7 +207,7 @@ self.port_forwarded = port self.port = port - def find_and_bind(self, minport, maxport, bind = '', reuse = False, + def find_and_bind(self, minport, maxport, bind = '', reuse = True, ipv6_socket_style = 1, upnp = 0, randomizer = False): e = 'maxport less than minport - no ports to check' if maxport-minport < 50 or not randomizer: @@ -236,6 +240,12 @@ handler = self.handler sock = socket.socket(socktype, socket.SOCK_STREAM) sock.setblocking(0) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + try: + server.setsockopt(socket.IPPROTO_IP, socket.IP_TOS, 8) + except: + pass + sock.bind(('', self.port)) try: sock.connect_ex(dns) except socket.error: