gh-127840: pass flags and address from send_fds (GH-127841)

socket: pass flags and address from send_fds

Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
This commit is contained in:
Marcin Bachry 2025-05-22 04:38:01 +02:00 committed by GitHub
parent b1b8962443
commit 518c95b552
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 1 deletions

View file

@ -563,7 +563,7 @@ if hasattr(_socket.socket, "sendmsg"):
import array
return sock.sendmsg(buffers, [(_socket.SOL_SOCKET,
_socket.SCM_RIGHTS, array.array("i", fds))])
_socket.SCM_RIGHTS, array.array("i", fds))], flags, address)
__all__.append("send_fds")
if hasattr(_socket.socket, "recvmsg"):

View file

@ -7366,6 +7366,30 @@ class SendRecvFdsTests(unittest.TestCase):
data = os.read(rfd, 100)
self.assertEqual(data, str(index).encode())
def testSendAndRecvFdsByAddress(self):
rfd, wfd = os.pipe()
self.addCleanup(os.close, rfd)
self.addCleanup(os.close, wfd)
sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
address = socket_helper.create_unix_domain_name()
self.addCleanup(os_helper.unlink, address)
socket_helper.bind_unix_socket(sock, address)
socket.send_fds(sock, [MSG], [rfd], 0, address)
# request more data and file descriptors than expected
msg, (rfd2,), flags, addr = socket.recv_fds(sock, len(MSG) * 2, 2)
self.addCleanup(os.close, rfd2)
self.assertEqual(msg, MSG)
self.assertEqual(flags, 0)
self.assertEqual(addr, address)
# test that the file descriptor is connected
os.write(wfd, b'data')
data = os.read(rfd2, 100)
self.assertEqual(data, b'data')
class FreeThreadingTests(unittest.TestCase):

View file

@ -0,0 +1 @@
Fix :func:`socket.send_fds` ignoring flags and address parameters.