Skip to content

Instantly share code, notes, and snippets.

@cuibonobo
Created September 28, 2015 22:16
Show Gist options
  • Select an option

  • Save cuibonobo/19fcb636b64d60af2140 to your computer and use it in GitHub Desktop.

Select an option

Save cuibonobo/19fcb636b64d60af2140 to your computer and use it in GitHub Desktop.
Access this with `telnet 127.0.0.1 56789`
import socket
RECV_BUFFER = 1024
BIND_ADDR = ""
PORT = 56789
conn_inputs = []
conn_outputs = []
listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listener.bind((BIND_ADDR, PORT))
listener.listen(5)
conn_inputs.append(listener)
while True:
read_s, write_s, err_s = select.select(conn_inputs, conn_outputs, [], 0)
for sock in read_s:
if sock == listener:
client, addr = listener.accept()
conn_inputs.append(client)
for o in conn_outputs:
o.send("Client {} connected.\n".format(addr))
conn_outputs.append(client)
else:
peername = sock.getpeername()
try:
data = sock.recv(RECV_BUFFER)
if data:
for o in conn_outputs:
if o != sock:
o.send("{}: {}".format(peername, data))
else:
sock.close()
conn_inputs.remove(sock)
conn_outputs.remove(sock)
for o in conn_outputs:
o.send("{} hung up.\n".format(peername))
except socket.error as e:
conn_inputs.remove(sock)
conn_outputs.remove(sock)
listener.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment