]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #18643: Fix some test_socket failures due to large default socket buffer
authorCharles-François Natali <cf.natali@gmail.com>
Thu, 29 Aug 2013 17:01:40 +0000 (19:01 +0200)
committerCharles-François Natali <cf.natali@gmail.com>
Thu, 29 Aug 2013 17:01:40 +0000 (19:01 +0200)
sizes.

Lib/test/support/__init__.py
Lib/test/test_socket.py

index 1c6ee0300be8f5312d71b8977f6a711e6dfc352e..1ab213624272c006cf1d535ce11e0984ff30849c 100644 (file)
@@ -601,8 +601,14 @@ IPV6_ENABLED = _is_ipv6_enabled()
 # Windows limit seems to be around 512 B, and many Unix kernels have a
 # 64 KiB pipe buffer size or 16 * PAGE_SIZE: take a few megs to be sure.
 # (see issue #17835 for a discussion of this number).
-PIPE_MAX_SIZE = 4 *1024 * 1024 + 1
-
+PIPE_MAX_SIZE = 4 * 1024 * 1024 + 1
+
+# A constant likely larger than the underlying OS socket buffer size, to make
+# writes blocking.
+# The socket buffer sizes can usually be tuned system-wide (e.g. through sysctl
+# on Linux), or on a per-socket basis (SO_SNDBUF/SO_RCVBUF). See issue #18643
+# for a discussion of this number).
+SOCK_MAX_SIZE = 16 * 1024 * 1024 + 1
 
 # decorator for skipping tests on non-IEEE 754 platforms
 requires_IEEE_754 = unittest.skipUnless(
index 9567090e996acb54a3bd70a9416d2b7306fb8e3e..b95e1abafe56af9f3a244f09d34712e6f8fb98c3 100644 (file)
@@ -1210,11 +1210,12 @@ class GeneralModuleTests(unittest.TestCase):
                 c.settimeout(1.5)
             with self.assertRaises(ZeroDivisionError):
                 signal.alarm(1)
-                c.sendall(b"x" * (1024**2))
+                c.sendall(b"x" * support.SOCK_MAX_SIZE)
             if with_timeout:
                 signal.signal(signal.SIGALRM, ok_handler)
                 signal.alarm(1)
-                self.assertRaises(socket.timeout, c.sendall, b"x" * (1024**2))
+                self.assertRaises(socket.timeout, c.sendall,
+                                  b"x" * support.SOCK_MAX_SIZE)
         finally:
             signal.alarm(0)
             signal.signal(signal.SIGALRM, old_alarm)
@@ -4047,7 +4048,7 @@ class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
         self.serv_skipped = None
         self.serv_conn.setblocking(False)
         # Try to saturate the socket buffer pipe with repeated large writes.
-        BIG = b"x" * (1024 ** 2)
+        BIG = b"x" * support.SOCK_MAX_SIZE
         LIMIT = 10
         # The first write() succeeds since a chunk of data can be buffered
         n = self.write_file.write(BIG)