mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
python/qmp: allow sockets to be passed to connect()
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> Message-id: 20230517163406.2593480-2-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
ab72522797
commit
9341b2a6b9
|
@ -370,7 +370,7 @@ async def accept(self) -> None:
|
||||||
|
|
||||||
@upper_half
|
@upper_half
|
||||||
@require(Runstate.IDLE)
|
@require(Runstate.IDLE)
|
||||||
async def connect(self, address: SocketAddrT,
|
async def connect(self, address: Union[SocketAddrT, socket.socket],
|
||||||
ssl: Optional[SSLContext] = None) -> None:
|
ssl: Optional[SSLContext] = None) -> None:
|
||||||
"""
|
"""
|
||||||
Connect to the server and begin processing message queues.
|
Connect to the server and begin processing message queues.
|
||||||
|
@ -615,7 +615,7 @@ async def _do_accept(self) -> None:
|
||||||
self.logger.debug("Connection accepted.")
|
self.logger.debug("Connection accepted.")
|
||||||
|
|
||||||
@upper_half
|
@upper_half
|
||||||
async def _do_connect(self, address: SocketAddrT,
|
async def _do_connect(self, address: Union[SocketAddrT, socket.socket],
|
||||||
ssl: Optional[SSLContext] = None) -> None:
|
ssl: Optional[SSLContext] = None) -> None:
|
||||||
"""
|
"""
|
||||||
Acting as the transport client, initiate a connection to a server.
|
Acting as the transport client, initiate a connection to a server.
|
||||||
|
@ -634,9 +634,17 @@ async def _do_connect(self, address: SocketAddrT,
|
||||||
# otherwise yield.
|
# otherwise yield.
|
||||||
await asyncio.sleep(0)
|
await asyncio.sleep(0)
|
||||||
|
|
||||||
self.logger.debug("Connecting to %s ...", address)
|
if isinstance(address, socket.socket):
|
||||||
|
self.logger.debug("Connecting with existing socket: "
|
||||||
if isinstance(address, tuple):
|
"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(
|
connect = asyncio.open_connection(
|
||||||
address[0],
|
address[0],
|
||||||
address[1],
|
address[1],
|
||||||
|
@ -644,13 +652,14 @@ async def _do_connect(self, address: SocketAddrT,
|
||||||
limit=self._limit,
|
limit=self._limit,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
self.logger.debug("Connecting to file://%s ...", address)
|
||||||
connect = asyncio.open_unix_connection(
|
connect = asyncio.open_unix_connection(
|
||||||
path=address,
|
path=address,
|
||||||
ssl=ssl,
|
ssl=ssl,
|
||||||
limit=self._limit,
|
limit=self._limit,
|
||||||
)
|
)
|
||||||
self._reader, self._writer = await connect
|
|
||||||
|
|
||||||
|
self._reader, self._writer = await connect
|
||||||
self.logger.debug("Connected.")
|
self.logger.debug("Connected.")
|
||||||
|
|
||||||
@upper_half
|
@upper_half
|
||||||
|
|
Loading…
Reference in a new issue