File: client.py

package info (click to toggle)
ovn 26.03.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 15,480 kB
  • sloc: ansic: 117,371; xml: 25,046; sh: 3,524; python: 1,918; makefile: 866
file content (74 lines) | stat: -rwxr-xr-x 2,182 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python3

import socket
import time
import argparse
import datetime
import os


def log_error(message):
    """Log error messages to <script_name>.log file"""
    timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log_message = f"[{timestamp}] CLIENT ERROR: {message}\n"

    try:
        script_name = os.path.basename(__file__)
        log = f"{script_name}.log"
        with open(log, "a") as log_file:
            log_file.write(log_message)
    except:
        pass


def get_socket_family(host):
    """Determine socket family based on IP address format"""
    try:
        # Try to parse as IPv4
        socket.inet_aton(host)
        return socket.AF_INET
    except socket.error:
        try:
            # Try to parse as IPv6
            socket.inet_pton(socket.AF_INET6, host)
            return socket.AF_INET6
        except socket.error:
            raise


def send_data_from_fifo_to_server(fifo_path='/tmp/myfifo',
                                  host='127.0.0.1', port=10000):
    # Determine socket family based on host address
    family = get_socket_family(host)

    try:
        # Open the FIFO for reading (blocking mode)
        with open(fifo_path, 'r') as fifo_file:
            with socket.socket(family, socket.SOCK_STREAM) as client_socket:
                client_socket.connect((host, port))
                while True:
                    data = fifo_file.readline()
                    if data:
                        client_socket.sendall(data.encode())
                    else:
                        time.sleep(0.1)

    except FileNotFoundError as e:
        log_error(f"FIFO file not found: {fifo_path} - {e}")
        raise
    except Exception as e:
        log_error(f"Unexpected error in client: {e}")
        raise


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    group = parser.add_argument_group()
    group.add_argument("-f", "--fifo_path")
    group.add_argument("-i", "--server-host")
    group.add_argument("-p", "--server-port", type=int)
    args = parser.parse_args()

    send_data_from_fifo_to_server(
        args.fifo_path, args.server_host, args.server_port
    )