New submission from STINNER Victor <victor.stin...@haypocalc.com>: I don't like the current behaviour of Python on closed socket:
>>> import socket >>> s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) >>> s.close() >>> s.fileno() -1 >>> s.getsockname() Traceback (most recent call last): File "<stdin>", line 1, in <module> socket.error: [Errno 9] Bad file descriptor Some operations are still allowed whereas the other raise an ugly error message. Most (or all) operation on a closed socket should be blocked by a socket.error. My patch raises a socket.error("I/O operation on closed socket") for most operations except: - close(): it call be called twice (or more) (keep current behaviour) - gettimeout(): should we raise an error? - setblocking(), settimeout(): should we raise an error? Maybe yes for setter but no for getter which would be inconsistent with getpeername()... The io library already has this behaviour: read(), write(), flush(), etc. are blocked by a ValueError("I/O operation on closed file") (see IOBase._check_closed in the io library). Issue #4791 changes the behaviour of closed SocketIO object: fileno() method raise a socket.error if it's closed even if the socket is still open. ---------- files: socket_error_closed.patch keywords: patch messages: 79217 nosy: haypo severity: normal status: open title: I/O operation on closed socket: improve the error message versions: Python 3.0 Added file: http://bugs.python.org/file12612/socket_error_closed.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue4853> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com