[Python-checkins] CVS: python/dist/src/Lib socket.py,1.11,1.12

Guido van Rossum gvanrossum@users.sourceforge.net
2001年8月17日 18:23:22 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv16772
Modified Files:
	socket.py 
Log Message:
When the socket is closed, don't just assign 0 to self._sock.
This breaks software that excepts a socket.error but not an
AttributeError.
Index: socket.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/socket.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** socket.py	2001年03月29日 04:36:08	1.11
--- socket.py	2001年08月18日 01:23:20	1.12
***************
*** 123,126 ****
--- 123,131 ----
 #
 
+ _socketmethods = (
+ 'bind', 'connect', 'connect_ex', 'fileno', 'listen',
+ 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
+ 'recv', 'recvfrom', 'send', 'sendto', 'setblocking', 'shutdown')
+ 
 class _socketobject:
 
***************
*** 129,133 ****
 
 def close(self):
! self._sock = 0
 
 def __del__(self):
--- 134,138 ----
 
 def close(self):
! self._sock = _closedsocket()
 
 def __del__(self):
***************
*** 144,155 ****
 return _fileobject(self._sock, mode, bufsize)
 
! _s = "def %s(self, *args): return apply(self._sock.%s, args)\n\n"
! for _m in ('bind', 'connect', 'connect_ex', 'fileno', 'listen',
! 'getpeername', 'getsockname',
! 'getsockopt', 'setsockopt',
! 'recv', 'recvfrom', 'send', 'sendto',
! 'setblocking',
! 'shutdown'):
 exec _s % (_m, _m)
 
 
--- 149,165 ----
 return _fileobject(self._sock, mode, bufsize)
 
! _s = "def %s(self, *args): return self._sock.%s(*args)\n\n"
! for _m in _socketmethods:
 exec _s % (_m, _m)
+ 
+ 
+ class _closedsocket:
+ 
+ def _bummer(self):
+ raise error(9, 'Bad file descriptor')
+ 
+ _s = "def %s(self, *args): self._bummer()\n\n"
+ for _m in _socketmethods:
+ exec _s % _m
 
 

AltStyle によって変換されたページ (->オリジナル) /