Skip to content

Commit 1ac7fbf

Browse files
Fix test
1 parent bf67bd8 commit 1ac7fbf

File tree

2 files changed

+44
-45
lines changed

2 files changed

+44
-45
lines changed

Lib/socket.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
socketpair() -- create a pair of new socket objects [*]
1414
fromfd() -- create a socket object from an open file descriptor [*]
1515
send_fds() -- Send file descriptor to the socket.
16-
recv_fds() -- Recieve file descriptor from the socket.
16+
recv_fds() -- Recieve file descriptors from the socket.
1717
fromshare() -- create a socket object from data received from socket.share() [*]
1818
gethostname() -- return the current hostname
1919
gethostbyname() -- map a hostname to its IP number
@@ -493,7 +493,6 @@ def recv_fds(sock, bufsize, maxfds, flags=0):
493493
_socket.CMSG_LEN(maxfds * fds.itemsize))
494494
for cmsg_level, cmsg_type, cmsg_data in ancdata:
495495
if (cmsg_level == _socket.SOL_SOCKET and cmsg_type == _socket.SCM_RIGHTS):
496-
# Append data, ignoring any truncated integers at the end.
497496
fds.frombytes(cmsg_data[:
498497
len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
499498

Lib/test/test_socket.py

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6186,11 +6186,53 @@ def test_dual_stack_client_v6(self):
61866186
self.echo_server(sock)
61876187
self.echo_client(("::1", port), socket.AF_INET6)
61886188

6189+
@requireAttrs(socket, "send_fds")
6190+
@requireAttrs(socket, "recv_fds")
6191+
@requireAttrs(socket, "AF_UNIX")
6192+
class SendRecvFdsTests(unittest.TestCase):
6193+
def testSendAndRecvFds(self):
6194+
def close_pipes(pipes):
6195+
for fd1, fd2 in pipes:
6196+
os.close(fd1)
6197+
os.close(fd2)
6198+
6199+
def close_fds(fds):
6200+
for fd in fds:
6201+
os.close(fd)
6202+
6203+
# send 10 file descriptors
6204+
pipes = [os.pipe() for _ in range(10)]
6205+
self.addCleanup(close_pipes, pipes)
6206+
fds = [rfd for rfd, wfd in pipes]
6207+
6208+
# use a UNIX socket pair to exchange file descriptors locally
6209+
sock1, sock2 = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM)
6210+
with sock1, sock2:
6211+
socket.send_fds(sock1, [MSG], fds)
6212+
# request more data and file descriptors than expected
6213+
msg, fds2, flags, addr = socket.recv_fds(sock2, len(MSG) * 2, len(fds) * 2)
6214+
self.addCleanup(close_fds, fds2)
6215+
6216+
self.assertEqual(msg, MSG)
6217+
self.assertEqual(len(fds2), len(fds))
6218+
self.assertEqual(flags, 0)
6219+
# don't test addr
6220+
6221+
# test that file descriptors are connected
6222+
for index, fds in enumerate(pipes):
6223+
rfd, wfd = fds
6224+
os.write(wfd, str(index).encode())
6225+
6226+
for index, rfd in enumerate(fds2):
6227+
data = os.read(rfd, 100)
6228+
self.assertEqual(data, str(index).encode())
6229+
61896230

61906231
def test_main():
61916232
tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest,
61926233
TestExceptions, BufferIOTest, BasicTCPTest2, BasicUDPTest,
6193-
UDPTimeoutTest, CreateServerTest, CreateServerFunctionalTest]
6234+
UDPTimeoutTest, CreateServerTest, CreateServerFunctionalTest,
6235+
SendRecvFdsTests]
61946236

61956237
tests.extend([
61966238
NonBlockingTCPTests,
@@ -6255,47 +6297,5 @@ def test_main():
62556297
support.threading_cleanup(*thread_info)
62566298

62576299

6258-
@requireAttrs(socket, "send_fds")
6259-
@requireAttrs(socket, "recv_fds")
6260-
@requireAttrs(socket, "AF_UNIX")
6261-
class SendRecvFdsTests(unittest.TestCase):
6262-
def testSendAndRecvFds(self):
6263-
def close_pipes(pipes):
6264-
for fd1, fd2 in pipes:
6265-
os.close(fd1)
6266-
os.close(fd2)
6267-
6268-
def close_fds(fds):
6269-
for fd in fds:
6270-
os.close(fd)
6271-
6272-
# send 10 file descriptors
6273-
pipes = [os.pipe() for _ in range(10)]
6274-
self.addCleanup(close_pipes, pipes)
6275-
fds = [fd2 for fd1, fd2 in pipes]
6276-
6277-
# use a UNIX socket pair to exchange file descriptors locally
6278-
sock1, sock2 = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM)
6279-
with sock1, sock2:
6280-
socket.send_fds(sock1, [MSG], fds)
6281-
# request more data and file descriptors than expected
6282-
msg, fds2, flags, addr = socket.recv_fds(sock2, len(MSG) * 2, len(fds) * 2)
6283-
self.addCleanup(close_fds, fds2)
6284-
6285-
self.assertEqual(msg, MSG)
6286-
self.assertEqual(len(fds2), len(fds))
6287-
self.assertEqual(flags, 0)
6288-
# don't test addr
6289-
6290-
# test that file descriptors are connected
6291-
for index, fds in enumerate(pipes):
6292-
fd1, fd2 = fds
6293-
os.write(fd1, str(index).encode())
6294-
6295-
for index, fd in enumerate(fds2):
6296-
data = os.read(fd, 100)
6297-
self.assertEqual(data, str(index).encode())
6298-
6299-
63006300
if __name__ == "__main__":
63016301
test_main()

0 commit comments

Comments
 (0)