diff options
| author | Trent Nelson <trent.nelson@snakebite.org> | 2008-04-04 20:04:09 (GMT) | 
|---|---|---|
| committer | Trent Nelson <trent.nelson@snakebite.org> | 2008-04-04 20:04:09 (GMT) | 
| commit | 4bffe8293f8daab239a3f9f082984454b8e86d03 (patch) | |
| tree | de03d22015e67f9f5f23cf9796fafe7f88b17556 /Lib/test/test_socket.py | |
| parent | f790648c8cfed44536bed3edf76a1b87031fa0b6 (diff) | |
| download | cpython-4bffe8293f8daab239a3f9f082984454b8e86d03.zip cpython-4bffe8293f8daab239a3f9f082984454b8e86d03.tar.gz cpython-4bffe8293f8daab239a3f9f082984454b8e86d03.tar.bz2  | |
Revert r62152 (Issue #2550).  Being able to observe the results of all the buildbots was certainly useful.  All of the platforms that have some form of BSD lineage -- FreeBSD, OS X, Solaris and Tru64 -- all pass the test.  Windows and Linux, on the other hand, don't.  Windows I knew about, Linux was a surprise.  Knowing this, I believe a more appropriate fix will revolve around test_support.bind_socket() -- this method needs to return a port that nothing in the system has bound already.  The best way to do this may just be to rely on ephemeral ports, rather than having the user specify a desired port, then fall back to four random ports, then try 0.
Diffstat (limited to 'Lib/test/test_socket.py')
| -rw-r--r-- | Lib/test/test_socket.py | 76 | 
1 files changed, 0 insertions, 76 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index c454d5b..6140962 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -3,7 +3,6 @@  import unittest  from test import test_support -import errno  import socket  import select  import thread, threading @@ -487,81 +486,6 @@ class GeneralModuleTests(unittest.TestCase):          reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)          self.failIf(reuse == 0, "failed to set reuse mode") -    def testAddressReuseSemantics(self): -        # As per the 'SO_REUSEADDR and SO_REUSEPORT Socket Options' section in -        # chapter 7.5 of Stevens' UNIX Network Programming Volume 1 (2nd Ed): -        # -        #   "With TCP, we are never able to start multiple servers that bind -        #    the same IP address and same port: a completely duplicate binding. -        #    That is, we cannot start one server that binds 198.69.10.2 port 80 -        #    and start another that also binds 198.69.10.2 port 80, even if we -        #    set the SO_REUSEADDR socket option for the second server." -        # -        # However, on Windows, it seems that if SO_REUSEADDR is set on the 2nd -        # socket, binding to an already bound (host, port) combination doesn't -        # raise an exception.  Instead, it causes Python to wedge pretty badly -        # when accept() is called against either of the sockets. This test case -        # is being added to help debug this issue, as well as seeing if the -        # expected semantics differ on any other platforms. - -        # Get a port that we *know* is unique.  Don't rely on test_support's -        # bind_port method, as this operates under the assumption that an -        # EADDRINUSE exception will be raised correctly, which is exactly what -        # we're trying to test here. -        host = '127.0.0.1' -        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -        sock.bind((host, 0)) -        port = sock.getsockname()[1] -        sock.close() -        del sock - -        # First test that we get EADDRINUSE without SO_REUSEADDR. -        sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -        sock1.bind((host, port)) -        sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -        try: -            sock2.bind((host, port)) -        except socket.error, (err, msg): -            self.assertEqual(err, errno.EADDRINUSE) -        else: -            self.fail("expected EADDRINUSE socket.error exception to be "    \ -                      "raised when attempting to bind a second socket to "   \ -                      "a (host, port) we've already bound to (SO_REUSEADDR " \ -                      "was NOT set on the socket)") -        finally: -            sock1.close() -            try: -                sock2.close() -            except: -                pass -            del sock1 -            del sock2 - -        # Try again with SO_REUSEADDR; the behaviour *should* be identical to -        # the test above, i.e. an EADDRINUSE socket.error should be raised. -        sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -        sock1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) -        sock1.bind((host, port)) -        sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -        sock2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) -        try: -            sock2.bind((host, port)) -        except socket.error, (err, msg): -            self.assertEqual(err, errno.EADDRINUSE) -        else: -            self.fail("expected EADDRINUSE socket.error exception to be "    \ -                      "raised when attempting to bind a second socket to "   \ -                      "a (host, port) we've already bound to (SO_REUSEADDR " \ -                      "*WAS* set on the socket)") -        finally: -            sock1.close() -            try: -                sock2.close() -            except: -                pass -            del sock1 -            del sock2 -      def testSendAfterClose(self):          # testing send() after close() with timeout          sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  | 
