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__":