[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