python/machine: use connect-based interface for existing sockets

Instead of using accept() with sockets (which uses open_with_socket()),
use calls to connect() to utilize existing sockets instead. A benefit of
this is more robust error handling already present within the connect()
call that isn't present in open_with_socket().

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 20230517163406.2593480-4-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2023-05-17 12:34:04 -04:00
parent b8d4ca1823
commit 7f5f3ae7d5

View file

@ -337,18 +337,17 @@ def _pre_launch(self) -> None:
self._remove_files.append(self._console_address) self._remove_files.append(self._console_address)
if self._qmp_set: if self._qmp_set:
monitor_address = None
sock = None sock = None
if self._monitor_address is None: if self._monitor_address is None:
self._sock_pair = socket.socketpair() self._sock_pair = socket.socketpair()
sock = self._sock_pair[1] sock = self._sock_pair[1]
if isinstance(self._monitor_address, str): if isinstance(self._monitor_address, str):
self._remove_files.append(self._monitor_address) self._remove_files.append(self._monitor_address)
monitor_address = self._monitor_address
self._qmp_connection = QEMUMonitorProtocol( self._qmp_connection = QEMUMonitorProtocol(
address=monitor_address, address=self._monitor_address,
sock=sock, sock=sock,
server=True, server=bool(self._monitor_address),
nickname=self._name nickname=self._name
) )
@ -370,7 +369,10 @@ def _post_launch(self) -> None:
if self._sock_pair: if self._sock_pair:
self._sock_pair[0].close() self._sock_pair[0].close()
if self._qmp_connection: if self._qmp_connection:
self._qmp.accept(self._qmp_timer) if self._sock_pair:
self._qmp.connect()
else:
self._qmp.accept(self._qmp_timer)
def _close_qemu_log_file(self) -> None: def _close_qemu_log_file(self) -> None:
if self._qemu_log_file is not None: if self._qemu_log_file is not None: