@@ -7037,25 +7037,22 @@ def test_dual_stack_client_v6(self):
70377037@requireAttrs (socket , "recv_fds" ) 
70387038@requireAttrs (socket , "AF_UNIX" ) 
70397039class  SendRecvFdsTests (unittest .TestCase ):
7040+     def  _cleanup_fds (self , fds ):
7041+         def  close_fds (fds ):
7042+             for  fd  in  fds :
7043+                 os .close (fd )
7044+         self .addCleanup (close_fds , fds )
7045+ 
70407046    def  _test_pipe (self , rfd , wfd , msg ):
70417047        assert  len (msg ) <  512 
70427048        os .write (wfd , msg )
70437049        data  =  os .read (rfd , 512 )
70447050        self .assertEqual (data , msg )
70457051
70467052    def  testSendAndRecvFds (self ):
7047-         def  close_pipes (pipes ):
7048-             for  fd1 , fd2  in  pipes :
7049-                 os .close (fd1 )
7050-                 os .close (fd2 )
7051- 
7052-         def  close_fds (fds ):
7053-             for  fd  in  fds :
7054-                 os .close (fd )
7055- 
70567053        # send 10 file descriptors 
70577054        pipes  =  [os .pipe () for  _  in  range (10 )]
7058-         self .addCleanup ( close_pipes ,  pipes )
7055+         self ._cleanup_fds ( fd   for   pair   in   pipes   for   fd   in   pair )
70597056        fds  =  [rfd  for  rfd , wfd  in  pipes ]
70607057
70617058        # use a UNIX socket pair to exchange file descriptors locally 
@@ -7064,7 +7061,7 @@ def close_fds(fds):
70647061            socket .send_fds (sock1 , [MSG ], fds )
70657062            # request more data and file descriptors than expected 
70667063            msg , fds2 , flags , addr  =  socket .recv_fds (sock2 , len (MSG ) *  2 , len (fds ) *  2 )
7067-             self .addCleanup ( close_fds ,  fds2 )
7064+             self ._cleanup_fds ( fds2 )
70687065
70697066        self .assertEqual (msg , MSG )
70707067        self .assertEqual (len (fds2 ), len (fds ))
@@ -7091,14 +7088,13 @@ def test_send_recv_fds_with_addrs(self):
70917088
70927089            socket .send_fds (sock1 , [MSG ], [rfd ], address = sock2_addr )
70937090            msg , fds , flags , addr  =  socket .recv_fds (sock2 , len (MSG ), 1 )
7094-             new_rfd  =  fds [0 ]
7095-             self .addCleanup (os .close , new_rfd )
7091+             self ._cleanup_fds (fds )
70967092
70977093        self .assertEqual (msg , MSG )
70987094        self .assertEqual (len (fds ), 1 )
70997095        self .assertEqual (addr , sock1_addr )
71007096
7101-         self ._test_pipe (new_rfd , wfd , MSG )
7097+         self ._test_pipe (fds [ 0 ] , wfd , MSG )
71027098
71037099    @requireAttrs (socket , "MSG_PEEK" ) 
71047100    def  test_recv_fds_peek (self ):
@@ -7115,16 +7111,20 @@ def test_recv_fds_peek(self):
71157111            peek_len  =  len (MSG ) //  2 
71167112            msg , fds , flags , addr  =  socket .recv_fds (sock2 , peek_len , 1 ,
71177113                                                    socket .MSG_PEEK )
7118-             self .addCleanup (os .close , fds [0 ])
7114+             self ._cleanup_fds (fds )
7115+ 
71197116            self .assertEqual (len (msg ), peek_len )
71207117            self .assertEqual (msg , MSG [:peek_len ])
71217118            self .assertEqual (flags  &  socket .MSG_TRUNC , socket .MSG_TRUNC )
7119+             self .assertEqual (len (fds ), 1 )
71227120            self ._test_pipe (fds [0 ], wfd , MSG )
71237121
71247122            # will raise BlockingIOError if MSG_PEEK didn't work 
71257123            msg , fds , flags , addr  =  socket .recv_fds (sock2 , len (MSG ), 1 )
7126-             self .addCleanup (os .close , fds [0 ])
7124+             self ._cleanup_fds (fds )
7125+ 
71277126            self .assertEqual (msg , MSG )
7127+             self .assertEqual (len (fds ), 1 )
71287128            self ._test_pipe (fds [0 ], wfd , MSG )
71297129
71307130    @requireAttrs (socket , "MSG_DONTWAIT" ) 
@@ -7142,9 +7142,10 @@ def test_send_fds_dontwait(self):
71427142                    socket .send_fds (sock1 , [MSG ], [rfd ], socket .MSG_DONTWAIT )
71437143
71447144            msg , fds , flags , addr  =  socket .recv_fds (sock2 , len (MSG ), 1 )
7145-             self .addCleanup ( os . close ,  fds [ 0 ] )
7145+             self ._cleanup_fds ( fds )
71467146
71477147        self .assertEqual (msg , MSG )
7148+         self .assertEqual (len (fds ), 1 )
71487149        self ._test_pipe (fds [0 ], wfd , MSG )
71497150
71507151
0 commit comments