[Python-checkins] python/dist/src/Lib socket.py,1.27,1.28

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
2002年8月08日 08:17:13 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv6833
Modified Files:
	socket.py 
Log Message:
Another refactoring. Changed 'socket' from being a factory function
to being a new-style class, to be more similar to the socket class
in the _socket module; it is now the same as the _socketobject class.
Added __slots__. Added docstrings, copied from the real socket class
where possible.
The _fileobject class is now also a new-style class with __slots__
(though without docstrings). The mode, name, softspace, bufsize and
closed attributes are properly supported (closed as a property; name
as a class attributes; the softspace, mode and bufsize as slots).
Index: socket.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/socket.py,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** socket.py	8 Aug 2002 01:02:16 -0000	1.27
--- socket.py	8 Aug 2002 15:16:20 -0000	1.28
***************
*** 44,53 ****
 from _socket import *
 
! SSL_EXISTS = 1
 try:
- import _ssl
 from _ssl import *
 except ImportError:
! SSL_EXISTS = 0
 
 import os, sys
--- 44,53 ----
 from _socket import *
 
! _have_ssl = False
 try:
 from _ssl import *
+ _have_ssl = True
 except ImportError:
! pass
 
 import os, sys
***************
*** 57,81 ****
 # XXX shouldn't there be something similar to the above for _ssl exports?
 
 if (sys.platform.lower().startswith("win")
 or (hasattr(os, 'uname') and os.uname()[0] == "BeOS")
 or sys.platform=="riscos"):
 
! _realsocketcall = _socket.socket
! 
! def socket(family=AF_INET, type=SOCK_STREAM, proto=0):
! return _socketobject(_realsocketcall(family, type, proto))
! socket.__doc__ = _realsocketcall.__doc__
 
! if SSL_EXISTS:
! _realsslcall = _ssl.ssl
 def ssl(sock, keyfile=None, certfile=None):
 if hasattr(sock, "_sock"):
 sock = sock._sock
! return _realsslcall(sock, keyfile, certfile)
! 
! del _socket
! if SSL_EXISTS:
! del _ssl
! del SSL_EXISTS
 
 # WSA error codes
--- 57,74 ----
 # XXX shouldn't there be something similar to the above for _ssl exports?
 
+ _realsocket = socket
+ _needwrapper = False
 if (sys.platform.lower().startswith("win")
 or (hasattr(os, 'uname') and os.uname()[0] == "BeOS")
 or sys.platform=="riscos"):
 
! _needwrapper = True
 
! if _have_ssl:
! _realssl = ssl
 def ssl(sock, keyfile=None, certfile=None):
 if hasattr(sock, "_sock"):
 sock = sock._sock
! return _realssl(sock, keyfile, certfile)
 
 # WSA error codes
***************
*** 141,156 ****
 'settimeout', 'gettimeout', 'shutdown')
 
! class _socketobject:
 
! class _closedsocket:
 def __getattr__(self, name):
 raise error(9, 'Bad file descriptor')
 
! def __init__(self, sock):
! self._sock = sock
 
 def close(self):
 # Avoid referencing globals here
 self._sock = self.__class__._closedsocket()
 
 def __del__(self):
--- 134,157 ----
 'settimeout', 'gettimeout', 'shutdown')
 
! class _socketobject(object):
 
! __doc__ = _realsocket.__doc__
! 
! __slots__ = ["_sock"]
! 
! class _closedsocket(object):
! __slots__ = []
 def __getattr__(self, name):
 raise error(9, 'Bad file descriptor')
 
! def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, _sock=None):
! if _sock is None:
! 	 _sock = _realsocket(family, type, proto)
! self._sock = _sock
 
 def close(self):
 # Avoid referencing globals here
 self._sock = self.__class__._closedsocket()
+ close.__doc__ = _realsocket.close.__doc__
 
 def __del__(self):
***************
*** 159,185 ****
 def accept(self):
 sock, addr = self._sock.accept()
! return _socketobject(sock), addr
 
 def dup(self):
! return _socketobject(self._sock)
 
 def makefile(self, mode='r', bufsize=-1):
 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 _fileobject:
 """Faux file object attached to a socket object."""
 
 default_bufsize = 8192
 
 def __init__(self, sock, mode='rb', bufsize=-1):
 self._sock = sock
! self._mode = mode # Not actually used in this version
 if bufsize < 0:
 bufsize = self.default_bufsize
 if bufsize == 0:
 self._rbufsize = 1
--- 160,204 ----
 def accept(self):
 sock, addr = self._sock.accept()
! return _socketobject(_sock=sock), addr
! accept.__doc__ = _realsocket.accept.__doc__
 
 def dup(self):
! """dup() -> socket object
! 
! Return a new socket object connected to the same system resource."""
! return _socketobject(_sock=self._sock)
 
 def makefile(self, mode='r', bufsize=-1):
+ """makefile([mode[, bufsize]]) -> file object
+ 
+ Return a regular file object corresponding to the socket. The mode
+ and bufsize arguments are as for the built-in open() function."""
 return _fileobject(self._sock, mode, bufsize)
 
! _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
! "%s.__doc__ = _realsocket.%s.__doc__\n")
 for _m in _socketmethods:
! exec _s % (_m, _m, _m, _m)
 
+ if _needwrapper:
+ socket = _socketobject
 
! class _fileobject(object):
 """Faux file object attached to a socket object."""
 
 default_bufsize = 8192
+ name = "<socket>"
+ 
+ __slots__ = ["mode", "bufsize", "softspace",
+ # "closed" is a property, see below
+ "_sock", "_rbufsize", "_wbufsize", "_rbuf", "_wbuf"]
 
 def __init__(self, sock, mode='rb', bufsize=-1):
 self._sock = sock
! self.mode = mode # Not actually used in this version
 if bufsize < 0:
 bufsize = self.default_bufsize
+ 	self.bufsize = bufsize
+ 	self.softspace = False
 if bufsize == 0:
 self._rbufsize = 1
***************
*** 192,195 ****
--- 211,218 ----
 self._rbuf = []
 self._wbuf = []
+ 
+ def _getclosed(self):
+ return self._sock is not None
+ closed = property(_getclosed, doc="True if the file is closed")
 
 def close(self):

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