• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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