[Python-checkins] cpython (3.2): Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise

antoine.pitrou python-checkins at python.org
Fri Sep 14 17:34:18 CEST 2012


http://hg.python.org/cpython/rev/fad797916266
changeset:   79026:fad797916266
branch:      3.2
parent:      79023:b01eb870f84f
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Fri Sep 14 17:28:10 2012 +0200
summary:
  Issue #15842: the SocketIO.{readable,writable,seekable} methods now raise ValueError when the file-like object is closed.
Patch by Alessandro Moura.

files:
  Lib/socket.py           |  15 +++++++++++++--
  Lib/test/test_socket.py |  11 +++++++++++
  Misc/NEWS               |   4 ++++
  3 files changed, 28 insertions(+), 2 deletions(-)


diff --git a/Lib/socket.py b/Lib/socket.py
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -315,12 +315,23 @@
     def readable(self):
         """True if the SocketIO is open for reading.
         """
-        return self._reading and not self.closed
+        if self.closed:
+            raise ValueError("I/O operation on closed socket.")
+        return self._reading
 
     def writable(self):
         """True if the SocketIO is open for writing.
         """
-        return self._writing and not self.closed
+        if self.closed:
+            raise ValueError("I/O operation on closed socket.")
+        return self._writing
+
+    def seekable(self):
+        """True if the SocketIO is open for seeking.
+        """
+        if self.closed:
+            raise ValueError("I/O operation on closed socket.")
+        return super().seekable()
 
     def fileno(self):
         """Return the file descriptor of the underlying socket.
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -839,6 +839,17 @@
             fp.close()
             self.assertEqual(repr(fp), "<_io.BufferedReader name=-1>")
 
+    def test_unusable_closed_socketio(self):
+        with socket.socket() as sock:
+            fp = sock.makefile("rb", buffering=0)
+            self.assertTrue(fp.readable())
+            self.assertFalse(fp.writable())
+            self.assertFalse(fp.seekable())
+            fp.close()
+            self.assertRaises(ValueError, fp.readable)
+            self.assertRaises(ValueError, fp.writable)
+            self.assertRaises(ValueError, fp.seekable)
+
     def testListenBacklog0(self):
         srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         srv.bind((HOST, 0))
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -120,6 +120,10 @@
 Library
 -------
 
+- Issue #15842: the SocketIO.{readable,writable,seekable} methods now
+  raise ValueError when the file-like object is closed.  Patch by Alessandro
+  Moura.
+
 - Issue #15881: Fixed atexit hook in multiprocessing.  Original patch
   by Chris McDonough.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list