diff options
Diffstat (limited to 'tools/testing/selftests/bpf/tcp_server.py')
-rwxr-xr-x | tools/testing/selftests/bpf/tcp_server.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/tcp_server.py b/tools/testing/selftests/bpf/tcp_server.py new file mode 100755 index 000000000..42ab8882f --- /dev/null +++ b/tools/testing/selftests/bpf/tcp_server.py @@ -0,0 +1,80 @@ +#!/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) |