[pypy-commit] pypy default: getsockopt calls on win32 with BOOL param return 1 byte

mattip pypy.commits at gmail.com
Thu Sep 14 15:42:20 EDT 2017


Author: Matti Picus <matti.picus at gmail.com>
Branch: 
Changeset: r92392:7f45abeb0620
Date: 2017-09-14 22:34 +0300
http://bitbucket.org/pypy/pypy/changeset/7f45abeb0620/

Log:	getsockopt calls on win32 with BOOL param return 1 byte

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
@@ -589,7 +589,12 @@
         import _socket
         s = _socket.socket()
         assert s.getsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, 0) == 0
-        assert s.getsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, 2) == b'\x00\x00'
+        ret = s.getsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, 2)
+        if len(ret) == 1:
+            # win32 returns a byte-as-bool
+            assert ret == b'\x00'
+        else:
+            assert ret == b'\x00\x00'
         s.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, True)
         assert s.getsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, 0) == 1
         s.setsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, 1)
@@ -599,7 +604,11 @@
         import _socket
         s = _socket.socket()
         buf = s.getsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, 1024)
-        assert buf == b'\x00' * 4
+        if len(buf) == 1:
+            # win32 returns a byte-as-bool
+            assert buf == b'\x00'
+        else:
+            assert buf == b'\x00' * 4
         raises(_socket.error, s.getsockopt,
                _socket.IPPROTO_TCP, _socket.TCP_NODELAY, 1025)
         raises(_socket.error, s.getsockopt,
diff --git a/rpython/rlib/rsocket.py b/rpython/rlib/rsocket.py
--- a/rpython/rlib/rsocket.py
+++ b/rpython/rlib/rsocket.py
@@ -845,6 +845,8 @@
     @jit.dont_look_inside
     def getsockopt_int(self, level, option):
         flag_p = lltype.malloc(rffi.INTP.TO, 1, flavor='raw')
+        # some win32 calls use only a byte to represent a bool
+        flag_p[0] = 0
         try:
             flagsize_p = lltype.malloc(_c.socklen_t_ptr.TO, flavor='raw')
             try:


More information about the pypy-commit mailing list