18c2ecf20Sopenharmony_ci#!/usr/bin/env python3 28c2ecf20Sopenharmony_ci# 38c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 48c2ecf20Sopenharmony_ci# 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ciimport sys, os, os.path, getopt 78c2ecf20Sopenharmony_ciimport socket, time 88c2ecf20Sopenharmony_ciimport subprocess 98c2ecf20Sopenharmony_ciimport select 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cidef read(sock, n): 128c2ecf20Sopenharmony_ci buf = b'' 138c2ecf20Sopenharmony_ci while len(buf) < n: 148c2ecf20Sopenharmony_ci rem = n - len(buf) 158c2ecf20Sopenharmony_ci try: s = sock.recv(rem) 168c2ecf20Sopenharmony_ci except (socket.error) as e: return b'' 178c2ecf20Sopenharmony_ci buf += s 188c2ecf20Sopenharmony_ci return buf 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cidef send(sock, s): 218c2ecf20Sopenharmony_ci total = len(s) 228c2ecf20Sopenharmony_ci count = 0 238c2ecf20Sopenharmony_ci while count < total: 248c2ecf20Sopenharmony_ci try: n = sock.send(s) 258c2ecf20Sopenharmony_ci except (socket.error) as e: n = 0 268c2ecf20Sopenharmony_ci if n == 0: 278c2ecf20Sopenharmony_ci return count; 288c2ecf20Sopenharmony_ci count += n 298c2ecf20Sopenharmony_ci return count 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ciSERVER_PORT = 12877 338c2ecf20Sopenharmony_ciMAX_PORTS = 2 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ciserverPort = SERVER_PORT 368c2ecf20Sopenharmony_ciserverSocket = None 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci# create passive socket 398c2ecf20Sopenharmony_ciserverSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_citry: serverSocket.bind(('::1', 0)) 428c2ecf20Sopenharmony_ciexcept socket.error as msg: 438c2ecf20Sopenharmony_ci print('bind fails: ' + str(msg)) 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cisn = serverSocket.getsockname() 468c2ecf20Sopenharmony_ciserverPort = sn[1] 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_cicmdStr = ("./tcp_client.py %d &") % (serverPort) 498c2ecf20Sopenharmony_cios.system(cmdStr) 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_cibuf = b'' 528c2ecf20Sopenharmony_cin = 0 538c2ecf20Sopenharmony_ciwhile n < 500: 548c2ecf20Sopenharmony_ci buf += b'.' 558c2ecf20Sopenharmony_ci n += 1 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciserverSocket.listen(MAX_PORTS) 588c2ecf20Sopenharmony_cireadList = [serverSocket] 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ciwhile True: 618c2ecf20Sopenharmony_ci readyRead, readyWrite, inError = \ 628c2ecf20Sopenharmony_ci select.select(readList, [], [], 2) 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci if len(readyRead) > 0: 658c2ecf20Sopenharmony_ci waitCount = 0 668c2ecf20Sopenharmony_ci for sock in readyRead: 678c2ecf20Sopenharmony_ci if sock == serverSocket: 688c2ecf20Sopenharmony_ci (clientSocket, address) = serverSocket.accept() 698c2ecf20Sopenharmony_ci address = str(address[0]) 708c2ecf20Sopenharmony_ci readList.append(clientSocket) 718c2ecf20Sopenharmony_ci else: 728c2ecf20Sopenharmony_ci sock.settimeout(1); 738c2ecf20Sopenharmony_ci s = read(sock, 1000) 748c2ecf20Sopenharmony_ci n = send(sock, buf) 758c2ecf20Sopenharmony_ci sock.close() 768c2ecf20Sopenharmony_ci serverSocket.close() 778c2ecf20Sopenharmony_ci sys.exit(0) 788c2ecf20Sopenharmony_ci else: 798c2ecf20Sopenharmony_ci print('Select timeout!') 808c2ecf20Sopenharmony_ci sys.exit(1) 81