diff --git a/examples/forward_poll.lua b/examples/forward_poll.lua index e151d27..25e1e4f 100644 --- a/examples/forward_poll.lua +++ b/examples/forward_poll.lua @@ -11,14 +11,25 @@ xreq:bind('tcp://127.0.0.1:13333') local xrep = poll_zsock(c:socket(zmq.XREP)) xrep:bind('tcp://127.0.0.1:13334') +local max_recv = 10 + local function forward_io(src,dst) - src.on_data = function() - repeat - local data = assert(src:recv(zmq.NOBLOCK)) - local more = src:getopt(zmq.RCVMORE) > 0 - dst:send(data,more and zmq.SNDMORE or 0) - until not more - end + src.on_data = function() + for i=1,max_recv do + repeat + local data, err = src:recv(zmq.NOBLOCK) + if not data then + if err == 'timeout' then + return + else + error("socket recv error:" .. err) + end + end + local more = src:getopt(zmq.RCVMORE) > 0 + dst:send(data,more and zmq.SNDMORE or 0) + until not more + end + end end forward_io(xrep,xreq)