]> granicus.if.org Git - python/commitdiff
Regain throughput lost with the _socketobject wrapper. The
authorSkip Montanaro <skip@pobox.com>
Tue, 29 Apr 2003 19:27:26 +0000 (19:27 +0000)
committerSkip Montanaro <skip@pobox.com>
Tue, 29 Apr 2003 19:27:26 +0000 (19:27 +0000)
throughput-sensitive methods are grabbed from the underlying _socket.socket
object.  Closes SF patch 729293.

Lib/socket.py

index 12f3c052d2955245b4e00ea9c7958a944649934f..b9d4049a1297495e3767b28b122f42536a2adf73 100644 (file)
@@ -131,27 +131,33 @@ def getfqdn(name=''):
 _socketmethods = (
     'bind', 'connect', 'connect_ex', 'fileno', 'listen',
     'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
-    'recv', 'recvfrom', 'send', 'sendall', 'sendto', 'setblocking',
+    'sendall', 'setblocking',
     'settimeout', 'gettimeout', 'shutdown')
 
 class _closedsocket(object):
     __slots__ = []
-    def __getattr__(self, name):
+    def _dummy(*args):
         raise error(9, 'Bad file descriptor')
+    send = recv = sendto = recvfrom = __getattr__ = _dummy
 
 class _socketobject(object):
 
     __doc__ = _realsocket.__doc__
 
-    __slots__ = ["_sock"]
+    __slots__ = ["_sock", "send", "recv", "sendto", "recvfrom"]
 
     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
+        self.send = self._sock.send
+        self.recv = self._sock.recv
+        self.sendto = self._sock.sendto
+        self.recvfrom = self._sock.recvfrom
 
     def close(self):
         self._sock = _closedsocket()
+        self.send = self.recv = self.sendto = self.recvfrom = self._sock._dummy
     close.__doc__ = _realsocket.close.__doc__
 
     def accept(self):