Author: Alecsandru Patrascu <alecsandru.patra...@rinftech.com>
Branch: sockopt_zero
Changeset: r91366:4c2ff9e6a959
Date: 2017-05-22 14:10 +0300
http://bitbucket.org/pypy/pypy/changeset/4c2ff9e6a959/

Log:    proper fix after review

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
@@ -305,14 +305,13 @@
         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 w_buflen is not None:
+            buflen = space.int_w(w_buflen)
+        if w_buflen is None or 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)
-        if buflen == 0:
-            return space.newint(0)
         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,15 +582,18 @@
         (reuse,) = struct.unpack('i', reusestr)
         assert reuse != 0
 
-    def test_getsockopt_zero(self):
-        # related to issue #2561: in CPython, when setting the buffer size:
-        # if 0, should return 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
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to