Index: Lib/socket.py =================================================================== --- Lib/socket.py (revision 67444) +++ Lib/socket.py (working copy) @@ -202,6 +202,7 @@ raise ValueError("invalid mode: %r" % mode) io.RawIOBase.__init__(self) self._sock = sock + self._fileno = self._sock.fileno() if "b" not in mode: mode += "b" self._mode = mode @@ -225,11 +226,11 @@ return self._writing and not self.closed def fileno(self): - return self._sock.fileno() + return self._fileno @property def name(self): - return self._sock.fileno() + return self._fileno @property def mode(self): @@ -238,12 +239,13 @@ def close(self): if self.closed: return + # http://bugs.python.org/issue3826 - Closed SocketIO's from makefile() + # should not prevent the underlying socket from being closed. + self._sock._decref_socketios() + del self._sock io.RawIOBase.close(self) - def __del__(self): - self._sock._decref_socketios() - def getfqdn(name=''): """Get fully qualified domain name from name.