close remote fd

This commit is contained in:
clowwindy 2012-04-20 23:09:55 +08:00
parent 1c49b9c688
commit 93890e9ccc
2 changed files with 36 additions and 26 deletions

View file

@ -47,13 +47,18 @@ class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
class Socks5Server(SocketServer.StreamRequestHandler):
def handle_tcp(self, sock, remote):
fdset = [sock, remote]
while True:
r, w, e = select.select(fdset, [], [])
if sock in r:
if remote.send(self.decrypt(sock.recv(4096))) <= 0: break
if remote in r:
if sock.send(self.encrypt(remote.recv(4096))) <= 0: break
try:
fdset = [sock, remote]
while True:
r, w, e = select.select(fdset, [], [])
if sock in r:
if remote.send(self.decrypt(sock.recv(4096))) <= 0:
break
if remote in r:
if sock.send(self.encrypt(remote.recv(4096))) <= 0:
break
finally:
remote.close()
def encrypt(self, data):
return data.translate(encrypt_table)