diff -r a3b61c770b40 Lib/ssl.py --- a/Lib/ssl.py Sun Dec 22 19:45:53 2013 -0600 +++ b/Lib/ssl.py Mon Dec 23 10:29:31 2013 +0800 @@ -149,7 +149,7 @@ from socket import getnameinfo as _getnameinfo from socket import SHUT_RDWR as _SHUT_RDWR -from socket import socket, AF_INET, SOCK_STREAM, create_connection +from socket import socket, AF_INET, SOCK_STREAM, create_connection, SocketType import base64 # for DER-to-PEM translation import traceback import errno @@ -482,6 +482,8 @@ self.ssl_version = ssl_version self.ca_certs = ca_certs self.ciphers = ciphers + if sock.type == SocketType.SOCK_DGRAM: + raise NotImplementedError("datagram sockets are unsupported") if server_side and server_hostname: raise ValueError("server_hostname can only be specified " "in client mode") diff -r a3b61c770b40 Lib/test/test_ssl.py --- a/Lib/test/test_ssl.py Sun Dec 22 19:45:53 2013 -0600 +++ b/Lib/test/test_ssl.py Mon Dec 23 10:29:31 2013 +0800 @@ -633,6 +633,18 @@ '1.3.6.1.5.5.7.3.2') + def test_unsupported_dtls(self): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.addCleanup(s.close) + with self.assertRaises(NotImplementedError) as cx: + ssl.wrap_socket(s, cert_reqs=ssl.CERT_NONE) + self.assertEqual(str(cx.exception), "datagram sockets are unsupported") + ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + with self.assertRaises(NotImplementedError) as cx: + ctx.wrap_socket(s) + self.assertEqual(str(cx.exception), "datagram sockets are unsupported") + + class ContextTests(unittest.TestCase): @skip_if_broken_ubuntu_ssl