]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
The socket module now always uses the _socketobject wrapper class, even on
authorSkip Montanaro <skip@pobox.com>
Sun, 30 Mar 2003 04:54:24 +0000 (04:54 +0000)
committerSkip Montanaro <skip@pobox.com>
Sun, 30 Mar 2003 04:54:24 +0000 (04:54 +0000)
platforms which have dup(2).  The makefile() method is built directly on top
of the socket without duplicating the file descriptor, allowing timeouts to
work properly.  Includes a new test case (urllibnet) which requires the
network resource.

Closes bug 707074.

Lib/socket.py
Lib/test/test_urllibnet.py [new file with mode: 0644]
Misc/NEWS

index a8a4e39d5a18f464aedba1e91557bf82b7a5fbae..cb0181b2a6c48db62f55924db00935b780c488bd 100644 (file)
@@ -59,13 +59,10 @@ if _have_ssl:
     __all__.extend(os._get_exports_list(_ssl))
 
 _realsocket = socket
-_needwrapper = False
 if (sys.platform.lower().startswith("win")
     or (hasattr(os, 'uname') and os.uname()[0] == "BeOS")
     or sys.platform=="riscos"):
 
-    _needwrapper = True
-
     if _have_ssl:
         _realssl = ssl
         def ssl(sock, keyfile=None, certfile=None):
@@ -180,8 +177,7 @@ class _socketobject(object):
         exec _s % (_m, _m, _m, _m)
     del _m, _s
 
-if _needwrapper:
-    socket = SocketType = _socketobject
+socket = SocketType = _socketobject
 
 class _fileobject(object):
     """Faux file object attached to a socket object."""
diff --git a/Lib/test/test_urllibnet.py b/Lib/test/test_urllibnet.py
new file mode 100644 (file)
index 0000000..3af2491
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+import unittest
+from test import test_support
+
+import socket
+import urllib2
+import sys
+
+class URLTimeoutTest(unittest.TestCase):
+
+    TIMEOUT = 10.0
+
+    def setUp(self):
+        socket.setdefaulttimeout(self.TIMEOUT)
+
+    def tearDown(self):
+        socket.setdefaulttimeout(None)
+
+    def testURLread(self):
+        f = urllib2.urlopen("http://www.python.org/")
+        x = f.read()
+
+def test_main():
+    test_support.requires('network')
+
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(URLTimeoutTest))
+    test_support.run_suite(suite)
+
+if __name__ == "__main__":
+    test_main()
index 15a0dafa202908b855aa1a1ee0434d5c2f13503a..3a1c87549cf15dd4e5766fd4f87144402df47192 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -59,6 +59,11 @@ Extension modules
   Subsumed the times() function into repeat().
   Added chain() and cycle().
 
+- The socket module now always uses the _socketobject wrapper class, even on
+  platforms which have dup(2).  The makefile() method is built directly
+  on top of the socket without duplicating the file descriptor, allowing
+  timeouts to work properly.
+
 Library
 -------