[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/5] python/qmp: allow sockets to be passed to connect()
|
From: |
John Snow |
|
Subject: |
[PATCH 1/5] python/qmp: allow sockets to be passed to connect() |
|
Date: |
Wed, 17 May 2023 12:34:02 -0400 |
Allow existing sockets to be passed to connect(). The changes are pretty
minimal, and this allows for far greater flexibility in setting up
communications with an endpoint.
Signed-off-by: John Snow <jsnow@redhat.com>
---
python/qemu/qmp/protocol.py | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/python/qemu/qmp/protocol.py b/python/qemu/qmp/protocol.py
index 22e60298d2..d534db4631 100644
--- a/python/qemu/qmp/protocol.py
+++ b/python/qemu/qmp/protocol.py
@@ -370,7 +370,7 @@ async def accept(self) -> None:
@upper_half
@require(Runstate.IDLE)
- async def connect(self, address: SocketAddrT,
+ async def connect(self, address: Union[SocketAddrT, socket.socket],
ssl: Optional[SSLContext] = None) -> None:
"""
Connect to the server and begin processing message queues.
@@ -615,7 +615,7 @@ async def _do_accept(self) -> None:
self.logger.debug("Connection accepted.")
@upper_half
- async def _do_connect(self, address: SocketAddrT,
+ async def _do_connect(self, address: Union[SocketAddrT, socket.socket],
ssl: Optional[SSLContext] = None) -> None:
"""
Acting as the transport client, initiate a connection to a server.
@@ -634,9 +634,17 @@ async def _do_connect(self, address: SocketAddrT,
# otherwise yield.
await asyncio.sleep(0)
- self.logger.debug("Connecting to %s ...", address)
-
- if isinstance(address, tuple):
+ if isinstance(address, socket.socket):
+ self.logger.debug("Connecting with existing socket: "
+ "fd=%d, family=%r, type=%r",
+ address.fileno(), address.family, address.type)
+ connect = asyncio.open_connection(
+ limit=self._limit,
+ ssl=ssl,
+ sock=address,
+ )
+ elif isinstance(address, tuple):
+ self.logger.debug("Connecting to %s ...", address)
connect = asyncio.open_connection(
address[0],
address[1],
@@ -644,13 +652,14 @@ async def _do_connect(self, address: SocketAddrT,
limit=self._limit,
)
else:
+ self.logger.debug("Connecting to file://%s ...", address)
connect = asyncio.open_unix_connection(
path=address,
ssl=ssl,
limit=self._limit,
)
+
self._reader, self._writer = await connect
-
self.logger.debug("Connected.")
@upper_half
--
2.40.0
- [PATCH 0/5] python: backport socket changes from python-qemu-qmp, John Snow, 2023/05/17
- [PATCH 1/5] python/qmp: allow sockets to be passed to connect(),
John Snow <=
- [PATCH 3/5] python/machine: use connect-based interface for existing sockets, John Snow, 2023/05/17
- [PATCH 4/5] python/qmp/legacy: remove open_with_socket() calls, John Snow, 2023/05/17
- [PATCH 2/5] python/qmp/legacy: allow using sockets for connect(), John Snow, 2023/05/17
- [PATCH 5/5] Revert "python/qmp/protocol: add open_with_socket()", John Snow, 2023/05/17
- Re: [PATCH 0/5] python: backport socket changes from python-qemu-qmp, John Snow, 2023/05/23