- rsock = tcp_handshake(TERMINATE, rsock, False, dice)
- if rsock:
- stop.append(True)
- result.append(rsock)
- rsock.send("PERRO")
- rsock.settimeout(6)
- try:
- gato = rsock.recv(4)
- except:
- gato = "TIMEOUT!!"
- rsock.settimeout(0)
- print >>sys.stderr, "tcp_establish: connected %s" % gato
-
- dice = Dice()
- dice.throw()
- stop = []
- result = []
- lsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
- rsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
- listen_thread = threading.Thread(target=listen, args=(stop, result, lsock, dice))
- connect_thread = threading.Thread(target=connect, args=(stop, result, rsock, dice))
- connect_thread.start()
- listen_thread.start()
- connect_thread.join()
- listen_thread.join()
- if not result:
+ win = tcp_handshake(rsock, False, hand)
+ stop.append(True)
+ rresult.append((win, rsock))
+
+ end = False
+ sock = None
+ while not end:
+ if TERMINATE:
+ raise OSError, "Killed"
+ hand = str(random.randint(1, 6))
+ stop = []
+ lresult = []
+ rresult = []
+ lsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
+ rsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
+ listen_thread = threading.Thread(target=listen, args=(stop, hand, lsock, lresult))
+ connect_thread = threading.Thread(target=connect, args=(stop, hand, rsock, rresult))
+ connect_thread.start()
+ listen_thread.start()
+ connect_thread.join()
+ listen_thread.join()
+ (lwin, lrsock) = lresult[0]
+ (rwin, rrsock) = rresult[0]
+ if not lrsock or not rrsock:
+ if not lrsock:
+ sock = rrsock
+ if not rrsock:
+ sock = lrsock
+ end = True
+ # both socket are connected
+ else:
+ if lwin:
+ sock = lrsock
+ end = True
+ elif rwin:
+ sock = rrsock
+ end = True
+
+ if not sock: