diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index 091234c..175091c 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -295,10 +295,12 @@
 
 
 class NetworkedTests(unittest.TestCase):
+    timeout = 30
 
     def test_connect(self):
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_NONE)
+        s.settimeout(self.timeout)
         try:
             s.connect(("svn.python.org", 443))
             self.assertEqual({}, s.getpeercert())
@@ -308,6 +310,7 @@
         # this should fail because we have no verification certs
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_REQUIRED)
+        s.settimeout(self.timeout)
         self.assertRaisesRegexp(ssl.SSLError, "certificate verify failed",
                                 s.connect, ("svn.python.org", 443))
         s.close()
@@ -316,6 +319,7 @@
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_REQUIRED,
                             ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
+        s.settimeout(self.timeout)
         try:
             s.connect(("svn.python.org", 443))
             self.assertTrue(s.getpeercert())
@@ -326,6 +330,7 @@
         # Same as test_connect, but with a separately created context
         ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             self.assertEqual({}, s.getpeercert())
@@ -334,12 +339,14 @@
         # This should fail because we have no verification certs
         ctx.verify_mode = ssl.CERT_REQUIRED
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         self.assertRaisesRegexp(ssl.SSLError, "certificate verify failed",
                                 s.connect, ("svn.python.org", 443))
         s.close()
         # This should succeed because we specify the root cert
         ctx.load_verify_locations(SVN_PYTHON_ORG_ROOT_CERT)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             cert = s.getpeercert()
@@ -357,6 +364,7 @@
         ctx.verify_mode = ssl.CERT_REQUIRED
         ctx.load_verify_locations(capath=CAPATH)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             cert = s.getpeercert()
@@ -368,6 +376,7 @@
         ctx.verify_mode = ssl.CERT_REQUIRED
         ctx.load_verify_locations(capath=BYTES_CAPATH)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             cert = s.getpeercert()
@@ -381,6 +390,7 @@
         # delay closing the underlying "real socket" (here tested with its
         # file descriptor, hence skipping the test under Windows).
         ss = ssl.wrap_socket(socket.socket(socket.AF_INET))
+        ss.settimeout(self.timeout)
         ss.connect(("svn.python.org", 443))
         fd = ss.fileno()
         f = ss.makefile()
@@ -396,6 +406,7 @@
 
     def test_non_blocking_handshake(self):
         s = socket.socket(socket.AF_INET)
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         s.setblocking(False)
         s = ssl.wrap_socket(s,
@@ -452,6 +463,7 @@
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_REQUIRED,
                             ca_certs=sha256_cert,)
+        s.settimeout(self.timeout)
         with support.transient_internet():
             try:
                 s.connect(remote)
