diff -r f2cb733c9a37 Lib/ssl.py --- a/Lib/ssl.py Tue Aug 23 00:58:21 2011 +0200 +++ b/Lib/ssl.py Tue Aug 23 14:15:58 2011 +1000 @@ -355,13 +355,15 @@ else: return socket.sendto(self, data, flags_or_addr, addr) - def sendmsg(self, *args, **kwargs): - self._checkClosed() - if self._sslobj: - raise ValueError("sendmsg not allowed on instances of %s" % - self.__class__) - else: - return socket.sendmsg(self, *args, **kwargs) + if hasattr(socket, 'sendmsg'): + # Only provide these methods if they're available on socket objects + def sendmsg(self, *args, **kwargs): + self._checkClosed() + if self._sslobj: + raise ValueError("sendmsg not allowed on instances of %s" % + self.__class__) + else: + return socket.sendmsg(self, *args, **kwargs) def sendall(self, data, flags=0): self._checkClosed() @@ -421,21 +423,25 @@ else: return socket.recvfrom_into(self, buffer, nbytes, flags) - def recvmsg(self, *args, **kwargs): - self._checkClosed() - if self._sslobj: - raise ValueError("recvmsg not allowed on instances of %s" % - self.__class__) - else: - return socket.recvmsg(self, *args, **kwargs) + if hasattr(socket, 'recvmsg'): + # Only provide these methods if they're available on socket objects + def recvmsg(self, *args, **kwargs): + self._checkClosed() + if self._sslobj: + raise ValueError("recvmsg not allowed on instances of %s" % + self.__class__) + else: + return socket.recvmsg(self, *args, **kwargs) - def recvmsg_into(self, *args, **kwargs): - self._checkClosed() - if self._sslobj: - raise ValueError("recvmsg_into not allowed on instances of %s" % - self.__class__) - else: - return socket.recvmsg_into(self, *args, **kwargs) + if hasattr(socket, 'recvmsg_into'): + # Only provide these methods if they're available on socket objects + def recvmsg_into(self, *args, **kwargs): + self._checkClosed() + if self._sslobj: + raise ValueError("recvmsg_into not allowed on instances of %s" % + self.__class__) + else: + return socket.recvmsg_into(self, *args, **kwargs) def pending(self): self._checkClosed() diff -r f2cb733c9a37 Lib/test/test_array.py --- a/Lib/test/test_array.py Tue Aug 23 00:58:21 2011 +0200 +++ b/Lib/test/test_array.py Tue Aug 23 14:15:58 2011 +1000 @@ -383,6 +383,7 @@ if a.itemsize>1: self.assertRaises(ValueError, b.fromstring, "x") nb_warnings += 1 + print('\n'+'\n'.join(map(str, r))) self.assertEqual(len(r), nb_warnings) def test_tofrombytes(self): diff -r f2cb733c9a37 Lib/test/test_ssl.py --- a/Lib/test/test_ssl.py Tue Aug 23 00:58:21 2011 +0200 +++ b/Lib/test/test_ssl.py Tue Aug 23 14:15:58 2011 +1000 @@ -186,11 +186,13 @@ 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.recvmsg, 1) - self.assertRaises(socket.error, ss.recvmsg_into, [bytearray(b'x')]) self.assertRaises(socket.error, ss.send, b'x') self.assertRaises(socket.error, ss.sendto, b'x', ('0.0.0.0', 0)) - self.assertRaises(socket.error, ss.sendmsg, [b'x']) + if hasattr(ss, 'recvmsg'): + self.assertRaises(socket.error, ss.recvmsg, 1) + self.assertRaises(socket.error, ss.recvmsg_into, [bytearray(b'x')]) + if hasattr(ss, 'sendmsg'): + self.assertRaises(socket.error, ss.sendmsg, [b'x']) def test_timeout(self): # Issue #8524: when creating an SSL socket, the timeout of the @@ -1537,17 +1539,23 @@ send_methods = [ ('send', s.send, True, []), ('sendto', s.sendto, False, ["some.address"]), - ('sendmsg', _sendmsg, False, []), ('sendall', s.sendall, True, []), ] + if hasattr(s, 'sendmsg'): + send_methods.extend([ + ('sendmsg', _sendmsg, False, []), + ]) recv_methods = [ ('recv', s.recv, True, []), ('recvfrom', s.recvfrom, False, ["some.address"]), - ('recvmsg', _recvmsg, False, [100]), ('recv_into', _recv_into, True, []), ('recvfrom_into', _recvfrom_into, False, []), - ('recvmsg_into', _recvmsg_into, False, [100]), ] + if hasattr(s, 'recvmsg'): + recv_methods.extend([ + ('recvmsg', _recvmsg, False, [100]), + ('recvmsg_into', _recvmsg_into, False, [100]), + ]) data_prefix = "PREFIX_" for meth_name, send_meth, expect_success, args in send_methods: