[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 3/6] python/console_socket: accept existing FD in initializer
From: |
John Snow |
Subject: |
[PATCH v3 3/6] python/console_socket: accept existing FD in initializer |
Date: |
Thu, 28 Sep 2023 00:49:40 -0400 |
Useful if we want to use ConsoleSocket() for a socket created by
socketpair().
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Ani Sinha <anisinha@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
---
python/qemu/machine/console_socket.py | 29 +++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/python/qemu/machine/console_socket.py
b/python/qemu/machine/console_socket.py
index 4e28ba9bb23..0a4e09ffc73 100644
--- a/python/qemu/machine/console_socket.py
+++ b/python/qemu/machine/console_socket.py
@@ -24,19 +24,32 @@ class ConsoleSocket(socket.socket):
"""
ConsoleSocket represents a socket attached to a char device.
- Optionally (if drain==True), drains the socket and places the bytes
- into an in memory buffer for later processing.
-
- Optionally a file path can be passed in and we will also
- dump the characters to this file for debugging purposes.
+ :param address: An AF_UNIX path or address.
+ :param sock_fd: Optionally, an existing socket file descriptor.
+ One of address or sock_fd must be specified.
+ :param file: Optionally, a filename to log to.
+ :param drain: Optionally, drains the socket and places the bytes
+ into an in memory buffer for later processing.
"""
- def __init__(self, address: str, file: Optional[str] = None,
+ def __init__(self,
+ address: Optional[str] = None,
+ sock_fd: Optional[int] = None,
+ file: Optional[str] = None,
drain: bool = False):
+ if address is None and sock_fd is None:
+ raise ValueError("one of 'address' or 'sock_fd' must be specified")
+ if address is not None and sock_fd is not None:
+ raise ValueError("can't specify both 'address' and 'sock_fd'")
+
self._recv_timeout_sec = 300.0
self._sleep_time = 0.5
self._buffer: Deque[int] = deque()
- socket.socket.__init__(self, socket.AF_UNIX, socket.SOCK_STREAM)
- self.connect(address)
+ if address is not None:
+ socket.socket.__init__(self, socket.AF_UNIX, socket.SOCK_STREAM)
+ self.connect(address)
+ else:
+ assert sock_fd is not None
+ socket.socket.__init__(self, fileno=sock_fd)
self._logfile = None
if file:
# pylint: disable=consider-using-with
--
2.41.0
- [PATCH v3 0/6] python/machine: use socketpair() for console socket, John Snow, 2023/09/28
- [PATCH v3 1/6] python/machine: move socket setup out of _base_args property, John Snow, 2023/09/28
- [PATCH v3 2/6] python/machine: close sock_pair in cleanup path, John Snow, 2023/09/28
- [PATCH v3 6/6] python/machine: remove unused sock_dir argument, John Snow, 2023/09/28
- [PATCH v3 4/6] python/machine: use socketpair() for console connections, John Snow, 2023/09/28
- [PATCH v3 3/6] python/console_socket: accept existing FD in initializer,
John Snow <=
- [PATCH v3 5/6] python/machine: use socketpair() for qtest connection, John Snow, 2023/09/28
- Re: [PATCH v3 0/6] python/machine: use socketpair() for console socket, Daniel P . Berrangé, 2023/09/28