Correct API design mistake from rev. 43126: make socket attributes readonly properties.
diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex
index fd43b1d..04d467a 100644
--- a/Doc/lib/libsocket.tex
+++ b/Doc/lib/libsocket.tex
@@ -654,21 +654,6 @@
 setting, and in general it is recommended to call
 \method{settimeout()} before calling \method{connect()}.
 
-\begin{methoddesc}[socket]{getfamily}{}
-Return the socket family, as given to the \class{socket} constructor.
-\versionadded{2.5}
-\end{methoddesc}
-
-\begin{methoddesc}[socket]{gettype}{}
-Return the socket type, as given to the \class{socket} constructor.
-\versionadded{2.5}
-\end{methoddesc}
-
-\begin{methoddesc}[socket]{getproto}{}
-Return the socket protocol, as given to the \class{socket} constructor.
-\versionadded{2.5}
-\end{methoddesc}
-
 \begin{methoddesc}[socket]{setsockopt}{level, optname, value}
 Set the value of the given socket option (see the \UNIX{} manual page
 \manpage{setsockopt}{2}).  The needed symbolic constants are defined in
@@ -692,6 +677,25 @@
 instead.
 
 
+Socket objects also have these (read-only) attributes that correspond
+to the values given to the \class{socket} constructor.
+
+\begin{memberdesc}[socket]{family}
+The socket family.
+\versionadded{2.5}
+\end{memberdesc}
+
+\begin{memberdesc}[socket]{type}
+The socket type.
+\versionadded{2.5}
+\end{memberdesc}
+
+\begin{memberdesc}[socket]{proto}
+The socket protocol.
+\versionadded{2.5}
+\end{memberdesc}
+
+
 \subsection{SSL Objects \label{ssl-objects}}
 
 SSL objects have the following methods.
diff --git a/Lib/socket.py b/Lib/socket.py
index 3dc59c4..7e49192 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -182,24 +182,10 @@
         Return a regular file object corresponding to the socket.  The mode
         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
+    
+    family = property(lambda self: self._sock.family, doc="the socket family")
+    type = property(lambda self: self._sock.type, doc="the socket type")
+    proto = property(lambda self: self._sock.proto, doc="the socket protocol")
 
     _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
           "%s.__doc__ = _realsocket.%s.__doc__\n")
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 5a851fc..592e897 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -469,12 +469,12 @@
         sock.close()
         self.assertRaises(socket.error, sock.send, "spam")
 
-    def testNewGetMethods(self):
-        # testing getfamily(), gettype() and getprotocol()
+    def testNewAttributes(self):
+        # testing .family, .type and .protocol
         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)
+        self.assertEqual(sock.family, socket.AF_INET)
+        self.assertEqual(sock.type, socket.SOCK_STREAM)
+        self.assertEqual(sock.proto, 0)
         sock.close()
 
 class BasicTCPTest(SocketConnectedTest):