1#!/usr/bin/env python3 2# 3# SPDX-License-Identifier: GPL-2.0 4# 5 6import sys, os, os.path, getopt 7import socket, time 8import subprocess 9import select 10 11def read(sock, n): 12 buf = b'' 13 while len(buf) < n: 14 rem = n - len(buf) 15 try: s = sock.recv(rem) 16 except (socket.error) as e: return b'' 17 buf += s 18 return buf 19 20def send(sock, s): 21 total = len(s) 22 count = 0 23 while count < total: 24 try: n = sock.send(s) 25 except (socket.error) as e: n = 0 26 if n == 0: 27 return count; 28 count += n 29 return count 30 31 32SERVER_PORT = 12877 33MAX_PORTS = 2 34 35serverPort = SERVER_PORT 36serverSocket = None 37 38# create passive socket 39serverSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) 40 41try: serverSocket.bind(('::1', 0)) 42except socket.error as msg: 43 print('bind fails: ' + str(msg)) 44 45sn = serverSocket.getsockname() 46serverPort = sn[1] 47 48cmdStr = ("./tcp_client.py %d &") % (serverPort) 49os.system(cmdStr) 50 51buf = b'' 52n = 0 53while n < 500: 54 buf += b'.' 55 n += 1 56 57serverSocket.listen(MAX_PORTS) 58readList = [serverSocket] 59 60while True: 61 readyRead, readyWrite, inError = \ 62 select.select(readList, [], [], 2) 63 64 if len(readyRead) > 0: 65 waitCount = 0 66 for sock in readyRead: 67 if sock == serverSocket: 68 (clientSocket, address) = serverSocket.accept() 69 address = str(address[0]) 70 readList.append(clientSocket) 71 else: 72 sock.settimeout(1); 73 s = read(sock, 1000) 74 n = send(sock, buf) 75 sock.close() 76 serverSocket.close() 77 sys.exit(0) 78 else: 79 print('Select timeout!') 80 sys.exit(1) 81