diff --git a/Lib/socket.py b/Lib/socket.py
index fcbc545..5578b13 100644
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -149,8 +149,6 @@
         if buffering == 0:
             if not binary:
                 raise ValueError("unbuffered streams must be binary")
-            raw.name = self.fileno()
-            raw.mode = mode
             return raw
         if reading and writing:
             buffer = io.BufferedRWPair(raw, raw, buffering)
@@ -160,11 +158,8 @@
             assert writing
             buffer = io.BufferedWriter(raw, buffering)
         if binary:
-            buffer.name = self.fileno()
-            buffer.mode = mode
             return buffer
         text = io.TextIOWrapper(buffer, encoding, newline)
-        text.name = self.fileno()
         text.mode = mode
         return text
 
@@ -230,6 +225,14 @@
     def fileno(self):
         return self._sock.fileno()
 
+    @property
+    def name(self):
+        return self._sock.fileno()
+
+    @property
+    def mode(self):
+        return self._mode
+
     def close(self):
         if self.closed:
             return
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 9d753b7..b2323fe 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -848,6 +848,14 @@
     def _testClosedAttr(self):
         self.assert_(not self.cli_file.closed)
 
+    def testAttributes(self):
+        self.assertEqual(self.serv_file.mode, 'r')
+        self.assertEqual(self.serv_file.name, self.cli_conn.fileno())
+
+    def _testAttributes(self):
+        self.assertEqual(self.cli_file.mode, 'w')
+        self.assertEqual(self.cli_file.name, self.serv_conn.fileno())
+
 class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
 
     """Repeat the tests from FileObjectClassTestCase with bufsize==0.
