import socket from threading import Thread, Lock class Sock: def __init__(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.queue = [] self.queue_lock = Lock() self.sock_thread = None def send(self, message, address): self.sock.sendto(message, address) def listen(self, address, length=65535): self.sock_thread = SockThread(self, address, length) self.sock_thread.start() def poll(self): if len(self.queue_lock) == 0: return [] with self.queue_lock: queue = self.queue self.queue = [] return queue class SockThread(Thread): def __init__(self, sock, address, length): super.__init__(super) self.sock = sock self.sock.sock.bind(address) self.length = self.length self.sock.sock.bind(address) def run(self): while True: r = self.sock.sock.recv(self.length) with self.sock.queue_lock: self.sock.queue.append(r)