Index: Lib/socket.py =================================================================== --- Lib/socket.py (revision 67439) +++ Lib/socket.py (working copy) @@ -202,6 +202,7 @@ raise ValueError("invalid mode: %r" % mode) io.RawIOBase.__init__(self) self._sock = sock + self._need_to_decref_sock = True if "b" not in mode: mode += "b" self._mode = mode @@ -238,10 +239,15 @@ 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() + self._need_to_decref_sock = False io.RawIOBase.close(self) def __del__(self): - self._sock._decref_socketios() + if self._need_to_decref_sock: + self._sock._decref_socketios() def getfqdn(name=''):