Issue #9853: Fix the signature of SSLSocket.recvfrom() and

SSLSocket.sendto() to match the corresponding socket methods.
This commit is contained in:
Antoine Pitrou 2010-09-14 14:43:44 +00:00
parent 9bfc0f0984
commit a468adc76d
3 changed files with 21 additions and 4 deletions

View File

@ -258,13 +258,15 @@ class SSLSocket(socket):
else: else:
return socket.send(self, data, flags) return socket.send(self, data, flags)
def sendto(self, data, addr, flags=0): def sendto(self, data, flags_or_addr, addr=None):
self._checkClosed() self._checkClosed()
if self._sslobj: if self._sslobj:
raise ValueError("sendto not allowed on instances of %s" % raise ValueError("sendto not allowed on instances of %s" %
self.__class__) self.__class__)
elif addr is None:
return socket.sendto(self, data, flags_or_addr)
else: else:
return socket.sendto(self, data, addr, flags) return socket.sendto(self, data, flags_or_addr, addr)
def sendall(self, data, flags=0): def sendall(self, data, flags=0):
self._checkClosed() self._checkClosed()
@ -308,13 +310,13 @@ class SSLSocket(socket):
else: else:
return socket.recv_into(self, buffer, nbytes, flags) return socket.recv_into(self, buffer, nbytes, flags)
def recvfrom(self, addr, buflen=1024, flags=0): def recvfrom(self, buflen=1024, flags=0):
self._checkClosed() self._checkClosed()
if self._sslobj: if self._sslobj:
raise ValueError("recvfrom not allowed on instances of %s" % raise ValueError("recvfrom not allowed on instances of %s" %
self.__class__) self.__class__)
else: else:
return socket.recvfrom(self, addr, buflen, flags) return socket.recvfrom(self, buflen, flags)
def recvfrom_into(self, buffer, nbytes=None, flags=0): def recvfrom_into(self, buffer, nbytes=None, flags=0):
self._checkClosed() self._checkClosed()

View File

@ -163,6 +163,18 @@ class BasicSocketTests(unittest.TestCase):
del ss del ss
self.assertEqual(wr(), None) self.assertEqual(wr(), None)
def test_wrapped_unconnected(self):
# Methods on an unconnected SSLSocket propagate the original
# socket.error raise by the underlying socket object.
s = socket.socket(socket.AF_INET)
ss = ssl.wrap_socket(s)
self.assertRaises(socket.error, ss.recv, 1)
self.assertRaises(socket.error, ss.recv_into, bytearray(b'x'))
self.assertRaises(socket.error, ss.recvfrom, 1)
self.assertRaises(socket.error, ss.recvfrom_into, bytearray(b'x'), 1)
self.assertRaises(socket.error, ss.send, b'x')
self.assertRaises(socket.error, ss.sendto, b'x', ('0.0.0.0', 0))
def test_timeout(self): def test_timeout(self):
# Issue #8524: when creating an SSL socket, the timeout of the # Issue #8524: when creating an SSL socket, the timeout of the
# original socket should be retained. # original socket should be retained.

View File

@ -52,6 +52,9 @@ Core and Builtins
Library Library
------- -------
- Issue #9853: Fix the signature of SSLSocket.recvfrom() and
SSLSocket.sendto() to match the corresponding socket methods.
- Issue 9840: Added a decorator to reprlib for wrapping __repr__ methods - Issue 9840: Added a decorator to reprlib for wrapping __repr__ methods
to make them handle recursive calls within the same thread. to make them handle recursive calls within the same thread.