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 38HostName = socket.gethostname() 39 40# create passive socket 41serverSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) 42host = socket.gethostname() 43 44try: serverSocket.bind((host, 0)) 45except socket.error as msg: 46 print('bind fails: ' + str(msg)) 47 48sn = serverSocket.getsockname() 49serverPort = sn[1] 50 51cmdStr = ("./tcp_client.py %d &") % (serverPort) 52os.system(cmdStr) 53 54buf = b'' 55n = 0 56while n < 500: 57 buf += b'.' 58 n += 1 59 60serverSocket.listen(MAX_PORTS) 61readList = [serverSocket] 62 63while True: 64 readyRead, readyWrite, inError = \ 65 select.select(readList, [], [], 2) 66 67 if len(readyRead) > 0: 68 waitCount = 0 69 for sock in readyRead: 70 if sock == serverSocket: 71 (clientSocket, address) = serverSocket.accept() 72 address = str(address[0]) 73 readList.append(clientSocket) 74 else: 75 sock.settimeout(1); 76 s = read(sock, 1000) 77 n = send(sock, buf) 78 sock.close() 79 serverSocket.close() 80 sys.exit(0) 81 else: 82 print('Select timeout!') 83 sys.exit(1) 84