Patch #1003700: Add socketpair function to socket module.
diff --git a/Lib/socket.py b/Lib/socket.py
index e97ce59..f96a146 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -10,6 +10,7 @@
Functions:
socket() -- create a new socket object
+socketpair() -- create a pair of new socket objects [*]
fromfd() -- create a socket object from an open file descriptor [*]
gethostname() -- return the current hostname
gethostbyname() -- map a hostname to its IP number
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index adeca56..2dc34aa 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -187,6 +187,28 @@
self.serv_conn = None
ThreadedTCPSocketTest.clientTearDown(self)
+class SocketPairTest(unittest.TestCase, ThreadableTest):
+
+ def __init__(self, methodName='runTest'):
+ unittest.TestCase.__init__(self, methodName=methodName)
+ ThreadableTest.__init__(self)
+
+ def setUp(self):
+ self.serv, self.cli = socket.socketpair()
+
+ def tearDown(self):
+ self.serv.close()
+ self.serv = None
+
+ def clientSetUp(self):
+ pass
+
+ def clientTearDown(self):
+ self.cli.close()
+ self.cli = None
+ ThreadableTest.clientTearDown(self)
+
+
#######################################################################
## Begin Tests
@@ -541,6 +563,25 @@
def _testRecvFrom(self):
self.cli.sendto(MSG, 0, (HOST, PORT))
+class BasicSocketPairTest(SocketPairTest):
+
+ def __init__(self, methodName='runTest'):
+ SocketPairTest.__init__(self, methodName=methodName)
+
+ def testRecv(self):
+ msg = self.serv.recv(1024)
+ self.assertEqual(msg, MSG)
+
+ def _testRecv(self):
+ self.cli.send(MSG)
+
+ def testSend(self):
+ self.serv.send(MSG)
+
+ def _testSend(self):
+ msg = self.cli.recv(1024)
+ self.assertEqual(msg, MSG)
+
class NonBlockingTCPTests(ThreadedTCPSocketTest):
def __init__(self, methodName='runTest'):
@@ -786,6 +827,8 @@
LineBufferedFileObjectClassTestCase,
SmallBufferedFileObjectClassTestCase
])
+ if hasattr(socket, "socketpair"):
+ tests.append(BasicSocketPairTest)
test_support.run_unittest(*tests)
if __name__ == "__main__":