[Python-checkins] r84813 - in python/branches/py3k: Doc/library/socket.rst Lib/socket.py Lib/test/test_socket.py Misc/NEWS

antoine.pitrou python-checkins at python.org
Tue Sep 14 20:00:03 CEST 2010


Author: antoine.pitrou
Date: Tue Sep 14 20:00:02 2010
New Revision: 84813

Log:
Issue #1552: socket.socketpair() now returns regular socket.socket
objects supporting the whole socket API (rather than the "raw"
_socket.socket objects).



Modified:
   python/branches/py3k/Doc/library/socket.rst
   python/branches/py3k/Lib/socket.py
   python/branches/py3k/Lib/test/test_socket.py
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Doc/library/socket.rst
==============================================================================
--- python/branches/py3k/Doc/library/socket.rst	(original)
+++ python/branches/py3k/Doc/library/socket.rst	Tue Sep 14 20:00:02 2010
@@ -364,6 +364,10 @@
    if defined on the platform; otherwise, the default is :const:`AF_INET`.
    Availability: Unix.
 
+   .. versionchanged:: 3.2
+      The returned socket objects now support the whole socket API, rather
+      than a subset.
+
 
 .. function:: fromfd(fd, family, type[, proto])
 

Modified: python/branches/py3k/Lib/socket.py
==============================================================================
--- python/branches/py3k/Lib/socket.py	(original)
+++ python/branches/py3k/Lib/socket.py	Tue Sep 14 20:00:02 2010
@@ -199,6 +199,27 @@
     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.

Modified: python/branches/py3k/Lib/test/test_socket.py
==============================================================================
--- python/branches/py3k/Lib/test/test_socket.py	(original)
+++ python/branches/py3k/Lib/test/test_socket.py	Tue Sep 14 20:00:02 2010
@@ -714,6 +714,7 @@
         # 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 @@
     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)

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Tue Sep 14 20:00:02 2010
@@ -52,6 +52,10 @@
 Library
 -------
 
+- Issue #1552: socket.socketpair() now returns regular socket.socket
+  objects supporting the whole socket API (rather than the "raw"
+  _socket.socket objects).
+
 - Issue #9853: Fix the signature of SSLSocket.recvfrom() and
   SSLSocket.sendto() to match the corresponding socket methods.
 


More information about the Python-checkins mailing list