summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSkip Montanaro <skip@pobox.com>2003-03-30 04:54:24 +0000
committerSkip Montanaro <skip@pobox.com>2003-03-30 04:54:24 +0000
commit89feabc7f5308e3190909f47fce225df28a65062 (patch)
treead1126c669f70a2138f8449453426d298d439a3c
parenta942b9931c9ef13f7baf82c12e4ee312e6906f1c (diff)
downloadcpython-git-89feabc7f5308e3190909f47fce225df28a65062.tar.gz
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. Includes a new test case (urllibnet) which requires the network resource. Closes bug 707074.
-rw-r--r--Lib/socket.py6
-rw-r--r--Lib/test/test_urllibnet.py32
-rw-r--r--Misc/NEWS5
3 files changed, 38 insertions, 5 deletions
diff --git a/Lib/socket.py b/Lib/socket.py
index a8a4e39d5a..cb0181b2a6 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -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
index 0000000000..3af2491ecc
--- /dev/null
+++ b/Lib/test/test_urllibnet.py
@@ -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()
diff --git a/Misc/NEWS b/Misc/NEWS
index 15a0dafa20..3a1c87549c 100644
--- 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
-------