- apply patch from Greg Smith <greg@electricrain.com> which sets the port
  for outbound connections so they come from a predictable port.
  <http://krypto.org/bt/bittornado-SocketHandler-sourceport.diff>

- 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:
