forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.7 KiB
80 lines
1.7 KiB
#!/usr/bin/env python3 |
|
# |
|
# SPDX-License-Identifier: GPL-2.0 |
|
# |
|
|
|
import sys, os, os.path, getopt |
|
import socket, time |
|
import subprocess |
|
import select |
|
|
|
def read(sock, n): |
|
buf = b'' |
|
while len(buf) < n: |
|
rem = n - len(buf) |
|
try: s = sock.recv(rem) |
|
except (socket.error) as e: return b'' |
|
buf += s |
|
return buf |
|
|
|
def send(sock, s): |
|
total = len(s) |
|
count = 0 |
|
while count < total: |
|
try: n = sock.send(s) |
|
except (socket.error) as e: n = 0 |
|
if n == 0: |
|
return count; |
|
count += n |
|
return count |
|
|
|
|
|
SERVER_PORT = 12877 |
|
MAX_PORTS = 2 |
|
|
|
serverPort = SERVER_PORT |
|
serverSocket = None |
|
|
|
# create passive socket |
|
serverSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) |
|
|
|
try: serverSocket.bind(('::1', 0)) |
|
except socket.error as msg: |
|
print('bind fails: ' + str(msg)) |
|
|
|
sn = serverSocket.getsockname() |
|
serverPort = sn[1] |
|
|
|
cmdStr = ("./tcp_client.py %d &") % (serverPort) |
|
os.system(cmdStr) |
|
|
|
buf = b'' |
|
n = 0 |
|
while n < 500: |
|
buf += b'.' |
|
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)
|
|
|