RFE #567972: Socket objects' family, type and proto properties are
now exposed via new get...() methods.
diff --git a/Lib/socket.py b/Lib/socket.py
index ee2457f..3dc59c4 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -183,6 +183,24 @@
         and bufsize arguments are as for the built-in open() function."""
         return _fileobject(self._sock, mode, bufsize)
 
+    def getfamily(self):
+        """getfamily() -> socket family
+
+        Return the socket family."""
+        return self._sock.family
+
+    def gettype(self):
+        """gettype() -> socket type
+
+        Return the socket type."""
+        return self._sock.type
+
+    def getproto(self):
+        """getproto() -> socket protocol
+
+        Return the socket protocol."""
+        return self._sock.proto
+
     _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
           "%s.__doc__ = _realsocket.%s.__doc__\n")
     for _m in _socketmethods:
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 1899e78..5a851fc 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -469,6 +469,14 @@
         sock.close()
         self.assertRaises(socket.error, sock.send, "spam")
 
+    def testNewGetMethods(self):
+        # testing getfamily(), gettype() and getprotocol()
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.assertEqual(sock.getfamily(), socket.AF_INET)
+        self.assertEqual(sock.gettype(), socket.SOCK_STREAM)
+        self.assertEqual(sock.getproto(), 0)
+        sock.close()
+
 class BasicTCPTest(SocketConnectedTest):
 
     def __init__(self, methodName='runTest'):