From 49913b646455b0554b9c5da62861a65326f15fbe Mon Sep 17 00:00:00 2001 From: Paul Brussee Date: Sat, 2 Nov 2024 00:35:52 +0100 Subject: [PATCH 1/2] chore: organize imports --- erpc_python/erpc/transport.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/erpc_python/erpc/transport.py b/erpc_python/erpc/transport.py index 8b98ca45..bf117cf6 100644 --- a/erpc_python/erpc/transport.py +++ b/erpc_python/erpc/transport.py @@ -7,14 +7,13 @@ # # SPDX-License-Identifier: BSD-3-Clause -import struct import socket +import struct import threading -from socket import SHUT_RDWR +import time -from .crc16 import Crc16 from .client import RequestError -import time +from .crc16 import Crc16 try: import serial @@ -170,7 +169,7 @@ def _serve(self): def close(self): if self._isServer: self._serverSockEventStart.clear() - self._sock.shutdown(SHUT_RDWR) + self._sock.shutdown(socket.SHUT_RDWR) self._sock.close() self._sock = None From 72663f0c4e6255d0495fb4c507d36897159d92b0 Mon Sep 17 00:00:00 2001 From: Paul Brussee Date: Sat, 2 Nov 2024 00:35:59 +0100 Subject: [PATCH 2/2] feat: add support for unix sockets to TCPTransport in erpc_python --- erpc_python/erpc/transport.py | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/erpc_python/erpc/transport.py b/erpc_python/erpc/transport.py index bf117cf6..a05a559c 100644 --- a/erpc_python/erpc/transport.py +++ b/erpc_python/erpc/transport.py @@ -137,11 +137,15 @@ class ConnectionClosed(Exception): class TCPTransport(FramedTransport): - def __init__(self, host, port, isServer): + def __init__(self, host, port=None, isServer=False, isUnixSocket=False): super(TCPTransport, self).__init__() + assert (port is not None and isUnixSocket is False) or ( + port is None and isUnixSocket is True + ), "port and isUnixSocket are mutually exclusive arguments" self._host = host self._port = port self._isServer = isServer + self._isUnixSocket = isUnixSocket self._sock = None if self._isServer: @@ -149,17 +153,25 @@ def __init__(self, host, port, isServer): self._serverThread.daemon = True self._serverThread.start() self._serverSockEventStart = threading.Event() + elif self._isUnixSocket: + self._sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + self._sock.connect(self._host) else: self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._sock.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) self._sock.connect((self._host, self._port)) def _serve(self): - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.setblocking(1) - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - s.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) - s.bind((self._host, self._port)) + if self._isUnixSocket: + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.setblocking(1) + s.bind(self._host) + else: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.setblocking(1) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + s.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) + s.bind((self._host, self._port)) s.listen(5) while True: