Author: Manuel Jacob <[email protected]>
Branch: py3.6
Changeset: r94002:c386ba74c681
Date: 2018-03-19 16:00 +0100
http://bitbucket.org/pypy/pypy/changeset/c386ba74c681/
Log: Change socket.close() to raise OSError if closing the underlying
socket fails and remove app-level test checking the old behavior.
This is a port of CPython commit
50ab1a3694c43b9ab6798b98d9e5983c78cb17e2: "Issue #26685: Raise
OSError if closing a socket fails"
diff --git a/pypy/module/_socket/interp_socket.py
b/pypy/module/_socket/interp_socket.py
--- a/pypy/module/_socket/interp_socket.py
+++ b/pypy/module/_socket/interp_socket.py
@@ -292,9 +292,8 @@
"""
try:
self.sock.close()
- except SocketError:
- # cpython doesn't return any errors on close
- pass
+ except SocketError as e:
+ raise converted_error(space, e)
self.may_unregister_rpython_finalizer(space)
def connect_w(self, space, w_addr):
diff --git a/pypy/module/_socket/test/test_sock_app.py
b/pypy/module/_socket/test/test_sock_app.py
--- a/pypy/module/_socket/test/test_sock_app.py
+++ b/pypy/module/_socket/test/test_sock_app.py
@@ -395,13 +395,12 @@
if os.name != 'nt':
raises(OSError, os.close, fileno)
- def test_socket_close_error(self):
- import _socket, os
- if os.name == 'nt':
- skip("Windows sockets are not files")
+ def test_socket_close_exception(self):
+ import errno, _socket
s = _socket.socket(_socket.AF_INET, _socket.SOCK_STREAM, 0)
- os.close(s.fileno())
- s.close()
+ _socket.socket(fileno=s.fileno()).close()
+ e = raises(OSError, s.close)
+ assert e.value.errno in (errno.EBADF, errno.ENOTSOCK)
def test_socket_connect(self):
import _socket, os
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit