Author: Carl Friedrich Bolz <cfb...@gmx.de> Branch: Changeset: r91368:965ffd1ed1de Date: 2017-05-22 13:51 +0000 http://bitbucket.org/pypy/pypy/changeset/965ffd1ed1de/
Log: Merged in palecsandru/pypy2_sockopt_zero/sockopt_zero (pull request #548) Passing a buffersize of 0 to socket.getsockopt Approved-by: Carl Friedrich Bolz <cfb...@gmx.de> 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 @@ -297,20 +297,19 @@ except SocketError as e: raise converted_error(space, e) - @unwrap_spec(level=int, optname=int) - def getsockopt_w(self, space, level, optname, w_buflen=None): + @unwrap_spec(level=int, optname=int, buflen=int) + def getsockopt_w(self, space, level, optname, buflen=0): """getsockopt(level, option[, buffersize]) -> value Get a socket option. See the Unix manual for level and option. If a nonzero buffersize argument is given, the return value is a string of that length; otherwise it is an integer. """ - if w_buflen is None: + if buflen == 0: try: return space.newint(self.sock.getsockopt_int(level, optname)) except SocketError as e: raise converted_error(space, e) - buflen = space.int_w(w_buflen) return space.newbytes(self.sock.getsockopt(level, optname, buflen)) def gettimeout_w(self, space): 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 @@ -582,6 +582,19 @@ (reuse,) = struct.unpack('i', reusestr) assert reuse != 0 + def test_getsetsockopt_zero(self): + # related to issue #2561: when specifying the buffer size param: + # if 0 or None, should return the setted value, + # otherwise an empty buffer of the specified size + 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' + 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) + assert s.getsockopt(_socket.IPPROTO_TCP, _socket.TCP_NODELAY, 0) == 1 + def test_socket_ioctl(self): import _socket, sys if sys.platform != 'win32': _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit