#!/usr/bin/env python3 # # SPDX-License-Identifier: GPL-2.0 # import sys, os, os.path, getopt import socket, time import subprocess import select def read(sock, n): buf = b'' while len(buf) < n: rem = n - len(buf) try: s = sock.recv(rem) except (socket.error) as e: return b'' buf += s return buf def send(sock, s): total = len(s) count = 0 while count < total: try: n = sock.send(s) except (socket.error) as e: n = 0 if n == 0: return count; count += n return count SERVER_PORT = 12877 MAX_PORTS = 2 serverPort = SERVER_PORT serverSocket = None # create passive socket serverSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) try: serverSocket.bind(('localhost', 0)) except socket.error as msg: print('bind fails: ' + str(msg)) sn = serverSocket.getsockname() serverPort = sn[1] cmdStr = ("./tcp_client.py %d &") % (serverPort) os.system(cmdStr) buf = b'' n = 0 while n < 500: buf += b'.' n += 1 serverSocket.listen(MAX_PORTS) readList = [serverSocket] while True: readyRead, readyWrite, inError = \ select.select(readList, [], [], 2) if len(readyRead) > 0: waitCount = 0 for sock in readyRead: if sock == serverSocket: (clientSocket, address) = serverSocket.accept() address = str(address[0]) readList.append(clientSocket) else: sock.settimeout(1); s = read(sock, 1000) n = send(sock, buf) sock.close() serverSocket.close() sys.exit(0) else: print('Select timeout!') sys.exit(1)