@@ -122,13 +122,18 @@ def getfqdn(name=''):
122122# These are not actually used on other platforms.
123123#
124124
125+ _socketmethods = (
126+ 'bind' , 'connect' , 'connect_ex' , 'fileno' , 'listen' ,
127+ 'getpeername' , 'getsockname' , 'getsockopt' , 'setsockopt' ,
128+ 'recv' , 'recvfrom' , 'send' , 'sendto' , 'setblocking' , 'shutdown' )
129+
125130class _socketobject :
126131
127132 def __init__ (self , sock ):
128133 self ._sock = sock
129134
130135 def close (self ):
131- self ._sock = 0
136+ self ._sock = _closedsocket ()
132137
133138 def __del__ (self ):
134139 self .close ()
@@ -143,16 +148,21 @@ def dup(self):
143148 def makefile (self , mode = 'r' , bufsize = - 1 ):
144149 return _fileobject (self ._sock , mode , bufsize )
145150
146- _s = "def %s(self, *args): return apply(self._sock.%s, args)\n \n "
147- for _m in ('bind' , 'connect' , 'connect_ex' , 'fileno' , 'listen' ,
148- 'getpeername' , 'getsockname' ,
149- 'getsockopt' , 'setsockopt' ,
150- 'recv' , 'recvfrom' , 'send' , 'sendto' ,
151- 'setblocking' ,
152- 'shutdown' ):
151+ _s = "def %s(self, *args): return self._sock.%s(*args)\n \n "
152+ for _m in _socketmethods :
153153 exec _s % (_m , _m )
154154
155155
156+ class _closedsocket :
157+
158+ def _bummer (self ):
159+ raise error (9 , 'Bad file descriptor' )
160+
161+ _s = "def %s(self, *args): self._bummer()\n \n "
162+ for _m in _socketmethods :
163+ exec _s % _m
164+
165+
156166class _fileobject :
157167
158168 def __init__ (self , sock , mode , bufsize ):
0 commit comments