#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 # # This file is part of Lustre, http://www.lustre.org/ # # lustre/tests/socketserver # # Domain socket server, used to test that domain sockets # work on lustre. # # Rewrite in Python: Timothy Day # import os import socket import sys # Define a function for logging messages def logmsg(msg): print(f"{sys.argv[0]} {os.getpid()}: {msg} at {os.popen('date').read().strip()}") # Get the socket path from the command-line argument, # or ask the user to input one if len(sys.argv) > 1: socket_path = sys.argv[1] else: socket_path = input("Enter socket path: ") try: # Create a Unix domain socket with a specified file path sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) # Bind the socket to the Unix domain socket file sock.bind(socket_path) # Listen for incoming connections on the socket sock.listen(socket.SOMAXCONN) # Fork a child process to handle the connection pid = os.fork() if pid > 0: # Parent process logmsg(f"server started on {socket_path}") sys.exit(0) elif pid < 0: # Fork failed logmsg(f"fork failed: {pid}") sys.exit(1) # Accept an incoming connection client_sock, _ = sock.accept() logmsg(f"connection on {socket_path}") # Send a message to the client and close # the client socket client_sock.send(b"This is a message from the server!\n") client_sock.close() except socket.error as e: logmsg(f"Socket error: {e}") finally: sock.close()