> On 25-Jul-2023, at 11:33 PM, John Snow <js...@redhat.com> wrote:
>
> Useful if we want to use ConsoleSocket() for a socket created by
> socketpair().
>
> Signed-off-by: John Snow <js...@redhat.com>
Reviewed-by: Ani Sinha <anisi...@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 4e28ba9bb2..0a4e09ffc7 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
>