import socket from threading import Thread, Lock class Sock: def __init__(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) self.queue = [] self.queue_lock = Lock() self.sock_thread = None def send(self, message, address): if type(message) == str: message = message.encode() self.sock.sendto(message, address) def listen(self, address, length=65535): self.sock_thread = SockThread(self, address, length) self.sock_thread.start() def get(self): if len(self.queue) == 0: return [] with self.queue_lock: queue = self.queue self.queue = [] return queue class SockThread(Thread): def __init__(self, sock, address, length): Thread.__init__(self) self.sock = sock self.length = length self.sock.sock.bind(address) def run(self): while True: r = self.sock.sock.recvfrom(self.length) with self.sock.queue_lock: self.sock.queue.append(r)