summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-09-14 18:00:02 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-09-14 18:00:02 (GMT)
commit9e0b864ac07ab85b618ccf3831eae97b2c91fb2e (patch)
tree195459e4f65f8d63c3ecd298f6d3790055a73b81 /Lib
parent38615993b0b13729cc2afaa69686f5bff17547c4 (diff)
downloadcpython-9e0b864ac07ab85b618ccf3831eae97b2c91fb2e.zip
cpython-9e0b864ac07ab85b618ccf3831eae97b2c91fb2e.tar.gz
cpython-9e0b864ac07ab85b618ccf3831eae97b2c91fb2e.tar.bz2
Issue #1552: socket.socketpair() now returns regular socket.socket
objects supporting the whole socket API (rather than the "raw" _socket.socket objects).
Diffstat (limited to 'Lib')
-rw-r--r--Lib/socket.py21
-rw-r--r--Lib/test/test_socket.py18
2 files changed, 39 insertions, 0 deletions
diff --git a/Lib/socket.py b/Lib/socket.py
index bfc9a726..9b5b23d 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -199,6 +199,27 @@ def fromfd(fd, family, type, proto=0):
return socket(family, type, proto, nfd)
+if hasattr(_socket, "socketpair"):
+
+ def socketpair(family=None, type=SOCK_STREAM, proto=0):
+ """socketpair([family[, type[, proto]]]) -> (socket object, socket object)
+
+ Create a pair of socket objects from the sockets returned by the platform
+ socketpair() function.
+ The arguments are the same as for socket() except the default family is
+ AF_UNIX if defined on the platform; otherwise, the default is AF_INET.
+ """
+ if family is None:
+ try:
+ family = AF_UNIX
+ except NameError:
+ family = AF_INET
+ a, b = _socket.socketpair(family, type, proto)
+ a = socket(family, type, proto, a.detach())
+ b = socket(family, type, proto, b.detach())
+ return a, b
+
+
class SocketIO(io.RawIOBase):
"""Raw I/O implementation for stream sockets.
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 05b6ca7..690d9b5 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -714,6 +714,7 @@ class BasicTCPTest(SocketConnectedTest):
# Testing fromfd()
fd = self.cli_conn.fileno()
sock = socket.fromfd(fd, socket.AF_INET, socket.SOCK_STREAM)
+ self.assertIsInstance(sock, socket.socket)
msg = sock.recv(1024)
self.assertEqual(msg, MSG)
@@ -814,6 +815,23 @@ class BasicSocketPairTest(SocketPairTest):
def __init__(self, methodName='runTest'):
SocketPairTest.__init__(self, methodName=methodName)
+ def _testDefaults(self):
+ pass
+
+ def testDefaults(self):
+ self.assertIsInstance(self.cli, socket.socket)
+ self.assertIsInstance(self.serv, socket.socket)
+ if hasattr(socket, 'AF_UNIX'):
+ self.assertEqual(self.cli.family, socket.AF_UNIX)
+ self.assertEqual(self.serv.family, socket.AF_UNIX)
+ else:
+ self.assertEqual(self.cli.family, socket.AF_INET)
+ self.assertEqual(self.serv.family, socket.AF_INET)
+ self.assertEqual(self.cli.type, socket.SOCK_STREAM)
+ self.assertEqual(self.serv.type, socket.SOCK_STREAM)
+ self.assertEqual(self.cli.proto, 0)
+ self.assertEqual(self.serv.proto, 0)
+
def testRecv(self):
msg = self.serv.recv(1024)
self.assertEqual(msg, MSG)