import socket import select IP = "0.0.0.0" UDP_PORT = 5069 TCP_PORT = 6069 udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) udp.bind((IP, UDP_PORT)) tcp.bind((IP, TCP_PORT)) tcp.listen(10) tcpconns = {tcp} def udp_data(udp: socket.socket) -> None: (udp_incoming, _, _) = select.select([udp], [], [], 0) if udp_incoming: udp_data, udp_addr = udp.recvfrom(1024) print("Received UDP data from %s with content %s" % (udp_addr, udp_data)) udp.sendto(udp_data, udp_addr) def tcp_data(tcp: socket.socket) -> None: (newsocks, _, _) = select.select(tcpconns, [], tcpconns, 0) for sock in newsocks: if sock is tcp: conn, addr = tcp.accept() conn.setblocking(False) tcpconns.add(conn) print("TCP connection from %s:%d" % addr) print(len(tcpconns)) continue try: data = sock.recv(1024) print("TCP Data: %s" % data) sock.sendall(b"aarf") except socket.timeout: print("Connection closed by remote end") tcpconns.remove(sock) sock.close() except ConnectionResetError: print("Connection reset by peer") tcpconns.remove(sock) sock.close() except BrokenPipeError: print("Broken pipe") tcpconns.remove(sock) sock.close() while True: udp_data(udp) tcp_data(tcp)