Make sure 'on_work' is enabled until 'recv' blocks, so all messages are consumed before blocking.

pull/47/merge
Robert G. Jakabosky 14 years ago
parent a9630265f1
commit 4d23290e3a

@ -102,12 +102,20 @@ end
function meths:recv(flags) function meths:recv(flags)
zsock_check_events(self) zsock_check_events(self)
return self.sock:recv(flags) local msg, err = self.sock:recv(flags)
if not msg and err == 'timeout' then
self.recv_blocked = true
end
return msg, err
end end
function meths:recv_msg(msg, flags) function meths:recv_msg(msg, flags)
zsock_check_events(self) zsock_check_events(self)
return self.sock:recv_msg(msg, flags) local stat, err = self.sock:recv_msg(msg, flags)
if not stat and err == 'timeout' then
self.recv_blocked = true
end
return stat, err
end end
local function nil_cb() local function nil_cb()
@ -118,6 +126,7 @@ local function wrap_zsock(sock, on_data, on_drain)
sock = sock, sock = sock,
on_data = on_data or nil_cb, on_data = on_data or nil_cb,
on_drain = on_drain or nil_cb, on_drain = on_drain or nil_cb,
recv_blocked = false,
send_blocked = false, send_blocked = false,
check_enabled = false, check_enabled = false,
}, zsock_mt) }, zsock_mt)
@ -138,7 +147,12 @@ local function wrap_zsock(sock, on_data, on_drain)
return return
end end
if read then if read then
self.recv_blocked = false
self:on_data(sock) self:on_data(sock)
-- there might be more messages to read.
if not self.recv_blocked then
zsock_check_events(self)
end
end end
if write and self.send_blocked then if write and self.send_blocked then
self:on_drain(sock) self:on_drain(sock)
@ -150,6 +164,7 @@ local function wrap_zsock(sock, on_data, on_drain)
zsock_check_events(self) zsock_check_events(self)
end) end)
zsock_check_events(self)
return self return self
end end

Loading…
Cancel
Save