Index: Lib/socket.py =================================================================== --- Lib/socket.py (révision 68329) +++ Lib/socket.py (copie de travail) @@ -225,11 +225,12 @@ return self._writing and not self.closed def fileno(self): + self._checkClosed() return self._sock.fileno() @property def name(self): - return self._sock.fileno() + return self.fileno() @property def mode(self): @@ -239,9 +240,12 @@ if self.closed: return io.RawIOBase.close(self) + self._sock._decref_socketios() + self._sock = None def __del__(self): - self._sock._decref_socketios() + if not self.closed: + self._sock._decref_socketios() def getfqdn(name=''): Index: Lib/test/test_socket.py =================================================================== --- Lib/test/test_socket.py (révision 68329) +++ Lib/test/test_socket.py (copie de travail) @@ -856,6 +856,15 @@ self.assertEqual(self.cli_file.mode, 'wb') self.assertEqual(self.cli_file.name, self.serv_conn.fileno()) + def testRealClose(self): + self.serv_file.close() + self.assertRaises(ValueError, self.serv_file.fileno) + self.cli_conn.close() + self.assertRaises(socket.error, self.cli_conn.getsockname) + + def _testRealClose(self): + pass + class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase): """Repeat the tests from FileObjectClassTestCase with bufsize==0.