Author: Armin Rigo <[email protected]>
Branch:
Changeset: r85347:aa8fac09d527
Date: 2016-06-23 09:55 +0200
http://bitbucket.org/pypy/pypy/changeset/aa8fac09d527/
Log: Merged in markrwilliams/pypy/save_socket_errno (pull request #458)
rffi's socket(2) wrapper did not preserve errno.
diff --git a/rpython/rlib/_rsocket_rffi.py b/rpython/rlib/_rsocket_rffi.py
--- a/rpython/rlib/_rsocket_rffi.py
+++ b/rpython/rlib/_rsocket_rffi.py
@@ -487,7 +487,9 @@
#hstrerror.argtypes = [c_int]
#hstrerror.restype = c_char_p
-socket = external('socket', [rffi.INT, rffi.INT, rffi.INT], socketfd_type)
+socket = external('socket', [rffi.INT, rffi.INT, rffi.INT], socketfd_type,
+ save_err=SAVE_ERR)
+
if WIN32:
socketclosename = 'closesocket'
diff --git a/rpython/rlib/test/test_rsocket.py
b/rpython/rlib/test/test_rsocket.py
--- a/rpython/rlib/test/test_rsocket.py
+++ b/rpython/rlib/test/test_rsocket.py
@@ -589,3 +589,15 @@
return 0
fc = compile(f, [], thread=True)
assert fc() == 0
+
+def test_socket_saves_errno(tmpdir):
+ # ensure errno is set to a known value...
+ unconnected_sock = RSocket()
+ e = py.test.raises(CSocketError, unconnected_sock.recv, 1024)
+ # ...which is ENOTCONN
+ assert e.value.errno == errno.ENOTCONN
+
+ e = py.test.raises(CSocketError,
+ RSocket,
+ family=AF_INET, type=SOCK_STREAM, proto=SOL_UDP)
+ assert e.value.errno in (errno.EPROTOTYPE, errno.EPROTONOSUPPORT)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit