From 89feabc7f5308e3190909f47fce225df28a65062 Mon Sep 17 00:00:00 2001 From: Skip Montanaro Date: Sun, 30 Mar 2003 04:54:24 +0000 Subject: 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. --- Lib/socket.py | 6 +----- Lib/test/test_urllibnet.py | 32 ++++++++++++++++++++++++++++++++ Misc/NEWS | 5 +++++ 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 Lib/test/test_urllibnet.py diff --git a/Lib/socket.py b/Lib/socket.py index a8a4e39..cb0181b 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 0000000..3af2491 --- /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 15a0daf..3a1c875 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 ------- -- cgit v0.12