On Fri, Apr 27, 2012 at 10:29 AM, Paul Colomiets <p...@colomiets.name> wrote: > Hi Gerhard, > > On Thu, Apr 26, 2012 at 10:02 AM, Gerhard Lipp <gel...@googlemail.com> wrote: >> Hello Paul! >> >> On Wed, Apr 25, 2012 at 8:29 PM, Paul Colomiets <p...@colomiets.name> wrote: >>> Hi Gerhard, >>> >>> On Wed, Apr 25, 2012 at 6:08 PM, Gerhard Lipp <gel...@googlemail.com> wrote: >>>> i figured out to boil down an example, which shows this bug. >>>> it consists of three files: >>>> 1) x.lua doing the XREP XREQ stuff, must be started once >>>> 2) rep.lua implementing a simple echo replier, must be started once >>>> 3) req.lua making the request to rep.lua through x.lua. must be >>>> started TWICE to produce the error. THIS PROCESS LOCKS. uncommenting >>>> the ev.WRITE is a bad workaround to this issue. >>> >>> As far as I can see, it not a workaround. It's just the way ZMQ_FD works. >>> Uze zmq_poll if you don't feel comfortable for that. The only way you can >>> change >>> that is returning getopt(zmq.EVENTS) instead of hardcoding ev.READ + >>> ev.WRITE >>> >> >> According to the manual, the fd returned by zmq_getsockopt(ZMQ_FD) >> "signals any pending events on the socket in an edge-triggered fashion >> by making the file descriptor become ready for reading". >> >> If ev.WRITE is required to get all ZMQ_POLLIN and/or ZMQ_POLLOUT >> events, the doc should be clearer. Anyhow, as the source looks like, >> the ZMQ_FD is the fd associated with the socket's "mailbox", which is >> used for all kinds communication (state transitions?) inside of ZMQ. A >> "selecting/polling" user process should not wake up unnecessarily to >> avoid context switches, which are really expensive on our (embedded) >> device. Thus i'd like to minimize the wakeups by just specifying >> ev.READ. >> > > Probably I don't understand the code. You must poll only for reading > on ZMQ_FD. But every zmq_send and zmq_recv cosumes mailbox. > Which means you must update you applications' state of readable > and writable flags (I mean your IO framework doesn't know that > socket became readable or writable). > > If you don't care about ZMQ_POLLOUT event, you still must check > ZMQ_EVENTS for reading on each zmq_send.
You are right, I am actually just waiting to be able to zmq_recv with ZMQ_NOBLOCK. I dont care about the ZMQ_POLLOUT in this example. As the docs state, either event is signaled by the mailbox (ZMQ_FD) becoming ready to read (ev.READ). That is why i am checking for ZMQ_POLLIN before entering the zmq_recv/zmq_send. > > -- > Paul > _______________________________________________ > zeromq-dev mailing list > zeromq-dev@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev _______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev