| #!/usr/bin/env python2 | |
| # | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # | |
| import sys, os, os.path, getopt | |
| import socket, time | |
| import subprocess | |
| import select | |
| def read(sock, n): | |
| buf = '' | |
| while len(buf) < n: | |
| rem = n - len(buf) | |
| try: s = sock.recv(rem) | |
| except (socket.error), e: return '' | |
| buf += s | |
| return buf | |
| def send(sock, s): | |
| total = len(s) | |
| count = 0 | |
| while count < total: | |
| try: n = sock.send(s) | |
| except (socket.error), e: n = 0 | |
| if n == 0: | |
| return count; | |
| count += n | |
| return count | |
| SERVER_PORT = 12877 | |
| MAX_PORTS = 2 | |
| serverPort = SERVER_PORT | |
| serverSocket = None | |
| HostName = socket.gethostname() | |
| # create passive socket | |
| serverSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) | |
| host = socket.gethostname() | |
| try: serverSocket.bind((host, 0)) | |
| except socket.error as msg: | |
| print 'bind fails: ', msg | |
| sn = serverSocket.getsockname() | |
| serverPort = sn[1] | |
| cmdStr = ("./tcp_client.py %d &") % (serverPort) | |
| os.system(cmdStr) | |
| buf = '' | |
| n = 0 | |
| while n < 500: | |
| buf += '.' | |
| 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) |