#author oyt , thanks very much!
import socket, select, array
import threading
import sys
import getopt
def threadfun(param):
clientsock,clientaddr,conn_port = param
remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
remote.connect(("127.0.0.1", conn_port))
while True:
infds,outfds,errfds = select.select([clientsock, remote],[],[])
if clientsock in infds:
buf = clientsock.recv(8196)
if len(buf) == 0:
clientsock.close()
break
# print "error"
remote.send(buf)
continue
if remote in infds:
buf = remote.recv(8196)
if len(buf) == 0:
remote.close()
break
clientsock.send(buf)
return
if __name__ == "__main__":
listen_port = 8000
conn_port = 23946
if len(sys.argv) > 2:
conn_port = int(sys.argv[2])
if len(sys.argv) > 1 :
listen_port = int(sys.argv[1])
server = socket.socket()
server.bind(("", listen_port))
server.listen(1)
while True:
clientsock,clientaddr = server.accept()
t = threading.Thread(target=threadfun, args=((clientsock, clientaddr, conn_port),))
t.daemon = True
t.start()