[zeromq-dev] ZMQ_POLLIN received on WRITE event

Goswin von Brederlow goswin-v-b at web.de
Fri Sep 26 10:45:55 CEST 2014

On Fri, Sep 26, 2014 at 09:55:59AM +0200, Dorvin wrote:
> W dniu 2014-09-26 02:05, KIU Shueng Chuan pisze:
> > Your code could be stripped down a lot:
> > 1) PUB socket is only for sending. There's no need to test it for
> > 2) PUB socket never blocks when sending. There's no need to test it for
> > 3) SUB socket is only for receiving. There's no need to test it for
> > 4) The ZMQ_FDs are only to be tested for readability. They are NOT to be
> > tested for writability (and in fact should always test positive for
> > writability.)
> >
> You are right. My case isn't really "minimal" but allows to test on 
> different types of sockets with just minimal changes.
> I still feel not right about receiving POLLIN on write but it might just 
> be my habit from old times of low level socket programming. You both 
> made me start to think about 0mq in different way.
> Thanks,
> Jarek

You aren't receiving POLLIN on write. You receive POLLIN on event,
whatever that may be. That's just how an eventfd works. There is no
way to make a FD emit a POLLOUT event like you can with a POLLIN.
Reading from an FD doesn't generate the event due to buffering.

Remember that a zmq socket has a fan in/out structure and the FD has
to signal all events for all lowlevel sockets:

       /---- socket 1
       |/--- socket 2
FD <---*---- socket 3
       |\--- socket 4
       \---- socket 5


More information about the zeromq-dev mailing list