[New-bugs-announce] [issue29343] sock.close() raises OSError EBADF when socket's fd is closed
Christian Heimes
report at bugs.python.org
Sun Jan 22 07:11:57 EST 2017
New submission from Christian Heimes:
In Python 3.6 the behavior of socket's close method has changed. In Python 2.7, 3.5 and earlier, socket.close() ignored EBADF. Starting with Python 3.6 socket.close() raises an OSError exception when its internal fd has been closed.
Python 2.7.12 (default, Sep 29 2016, 12:52:02)
[GCC 6.2.1 20160916 (Red Hat 6.2.1-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, socket
>>> sock = socket.socket()
>>> os.close(sock.fileno())
>>> sock.close()
Python 3.5.2 (default, Sep 14 2016, 11:28:32)
[GCC 6.2.1 20160901 (Red Hat 6.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> sock = socket.socket()
>>> import os, socket
>>> os.close(sock.fileno())
>>> sock.close()
Python 3.6.0+ (3.6:ea0c488b9bac, Jan 14 2017, 14:08:17)
[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, socket
>>> sock = socket.socket()
>>> os.close(sock.fileno())
>>> sock.close()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/heimes/dev/python/python36/lib/python3.6/socket.py", line 417, in close
self._real_close()
File "/home/heimes/dev/python/python36/lib/python3.6/socket.py", line 411, in _real_close
_ss.close(self)
OSError: [Errno 9] Bad file descriptor
Abstraction layers such as the socket class should ignore EBADF in close(). A debug message or a warning is ok, but an exception is wrong. Even the man page for close discourages it, http://man7.org/linux/man-pages/man2/close.2.html
Note, however, that a failure return should be used only for
diagnostic purposes (i.e., a warning to the application that there
may still be I/O pending or there may have been failed I/O) or
remedial purposes (e.g., writing the file once more or creating a
backup).
----------
components: Library (Lib)
keywords: 3.6regression
messages: 286004
nosy: christian.heimes
priority: normal
severity: normal
status: open
title: sock.close() raises OSError EBADF when socket's fd is closed
type: behavior
versions: Python 3.6, Python 3.7
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue29343>
_______________________________________
More information about the New-bugs-announce
mailing list