Skip to content

Instantly share code, notes, and snippets.

@sorenisanerd
Created November 27, 2014 10:26
Show Gist options
  • Save sorenisanerd/5e914220c2350342c4e2 to your computer and use it in GitHub Desktop.
Save sorenisanerd/5e914220c2350342c4e2 to your computer and use it in GitHub Desktop.
import select
import socket
import sys
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.setblocking(0)
myport = int(sys.argv[1])
server_socket.bind(('0.0.0.0', myport))
sockets = [server_socket]
mirror_connections = {}
server_socket.listen(10)
while True:
rfds, _wfds, xfds = select.select(sockets, [], sockets, 1)
print rfds, _wfds, xfds
for rfd in rfds:
if server_socket == rfd:
conn, addr = server_socket.accept()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((addr[0], myport))
sockets.append(s)
sockets.append(conn)
mirror_connections[s] = conn
mirror_connections[conn] = s
except Exception, e:
conn.close()
else:
buf = rfd.recv(4096)
if len(buf) == 0:
print 'conn closed'
mirror_conn = mirror_connections[rfd]
sockets.remove(rfd)
sockets.remove(mirror_conn)
mirror_conn.close()
rfd.close()
del mirror_connections[mirror_conn]
del mirror_connections[rfd]
continue
mirror_connections[rfd].send(buf)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment