python/aqmp: fix send_fd_scm for python 3.6.x

3.6 doesn't play keepaway with the socket object, so we don't need to go
fishing for it on this version. In fact, so long as 'sendmsg' is still
available, it's probably preferable to just use that method and only go
fishing for forbidden details when we absolutely have to.

Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
Message-id: 20211118204620.1897674-8-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
John Snow 2021-11-18 15:46:20 -05:00
parent 206439cd89
commit a57cb3e23d

View File

@ -639,9 +639,12 @@ class QMPClient(AsyncProtocol[Message], Events):
if sock.family != socket.AF_UNIX: if sock.family != socket.AF_UNIX:
raise AQMPError("Sending file descriptors requires a UNIX socket.") raise AQMPError("Sending file descriptors requires a UNIX socket.")
# Void the warranty sticker. if not hasattr(sock, 'sendmsg'):
# Access to sendmsg in asyncio is scheduled for removal in Python 3.11. # We need to void the warranty sticker.
sock = sock._sock # pylint: disable=protected-access # Access to sendmsg is scheduled for removal in Python 3.11.
# Find the real backing socket to use it anyway.
sock = sock._sock # pylint: disable=protected-access
sock.sendmsg( sock.sendmsg(
[b' '], [b' '],
[(socket.SOL_SOCKET, socket.SCM_RIGHTS, struct.pack('@i', fd))] [(socket.SOL_SOCKET, socket.SCM_RIGHTS, struct.pack('@i', fd))]