Skip to content

Instantly share code, notes, and snippets.

@mmkhitaryan
Last active February 3, 2020 12:14
Show Gist options
  • Select an option

  • Save mmkhitaryan/79d3dcf660885e4d15b7923d8cf5a4e9 to your computer and use it in GitHub Desktop.

Select an option

Save mmkhitaryan/79d3dcf660885e4d15b7923d8cf5a4e9 to your computer and use it in GitHub Desktop.
Echo servers
import socket, threading
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind(('0.0.0.0', 8082))
serversocket.listen(5)
def connection_handler(socket):
while True:
data = socket.recv(1024)
if not data: # https://manpages.debian.org/buster/manpages-dev/recv.2.en.html#RETURN_VALUE
return 'gg'
socket.send(data)
while True:
connectiontoclient, address = serversocket.accept()
t = threading.Thread(target=connection_handler, args=(connectiontoclient,))
t.start()
import socket, threading, time, select
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
serversocket.bind(('0.0.0.0', 811))
serversocket.listen(5)
connections = set()
def ready_handler(sockets, writable):
for socket in sockets:
data = socket.recv(1024)
if not data:
connections.remove(socket)
if socket in writable:
try:
socket.send(data)
except:
pass
def select_checker():
while True:
ready, writable, error = select.select(connections,connections,connections, 2)
if ready:
ready_handler(ready, writable)
t = threading.Thread(target=select_checker)
t.start()
# init socket connections list
# spawn connection accepter, add to list when connected
# spawn checker, every 1 second sleep and run select
# if checker sees some stuff, run read_operation
while True:
connectiontoclient, address = serversocket.accept()
connections.add(connectiontoclient)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment