zmq: Socket.close() support linger argument; Thanks to Eric Windisch

https://github.com/eventlet/eventlet/issues/9
Regression. Worked in 0.9.16 because .close() method was not overriden.
This commit is contained in:
Sergey Shepelev
2013-01-14 02:04:47 +04:00
parent 675a2df36b
commit e837f37c0f
2 changed files with 12 additions and 2 deletions

View File

@@ -212,8 +212,8 @@ class Socket(_Socket):
self._eventlet_listener = hub.add(hub.READ, self.getsockopt(FD), event)
@_wraps(_Socket.close)
def close(self):
_Socket.close(self)
def close(self, linger=None):
super(Socket, self).close(linger)
if self._eventlet_listener is not None:
hubs.get_hub().remove(self._eventlet_listener)
self._eventlet_listener = None

View File

@@ -58,6 +58,16 @@ got '%s'" % (zmq.ZMQError(errno), zmq.ZMQError(e.errno)))
else:
self.fail("Function did not raise any error")
@skip_unless(zmq_supported)
def test_close_linger(self):
"""Socket.close() must support linger argument.
https://github.com/eventlet/eventlet/issues/9
"""
sock1, sock2, _ = self.create_bound_pair(zmq.PAIR, zmq.PAIR)
sock1.close(1)
sock2.close(linger=0)
@skip_unless(zmq_supported)
def test_recv_spawned_before_send_is_non_blocking(self):
req, rep, port = self.create_bound_pair(zmq.PAIR, zmq.PAIR)