[zeromq-dev] Using ZMQ_FD with select
Schmurfy
schmurfy at gmail.com
Sun Feb 19 11:02:58 CET 2012
Now I really feel stupid xD
Thanks for pointing this out, not really intuitive.
I am back to square one since it does not explain my problem then xD
But I am curious what was your problem with REQ/REP if not this one because
I also have problems with REQ/REP where the other sockets type works as
intended.
I just can't pinpoint what exactly is wrong and where.
On 19 February 2012 00:42, Yi Ding <yi.s.ding at gmail.com> wrote:
> On Sat, Feb 18, 2012 at 5:32 PM, Yi Ding <yi.s.ding at gmail.com> wrote:
> > On Sat, Feb 18, 2012 at 5:31 PM, Yi Ding <yi.s.ding at gmail.com> wrote:
> >> On Sat, Feb 18, 2012 at 8:59 AM, Schmurfy <schmurfy at gmail.com> wrote:
> >>> I have a strange problem related to using the file descriptor with an
> event
> >>> loop which led me to do some testing with it in C but there is still
> >>> something I cannot figure out.
> >>>
> >>> I created a simple client and server, the client (req.c) sends a
> request and
> >>> wait for an answer while the server just sends back what was received,
> my
> >>> problem is that the client (req.c) always timeout while doing a select
> on
> >>> the file descriptor and I cannot figure out what is wrong in my code.
> >>>
> >>> Another thing that bother me is that the file descriptor is
> edge-triggered
> >>> as specified in the documentation but what happens if I "miss" the
> change ?
> >>> I am not sure if this is possible but let's say I was doing something
> else
> >>> when the data was receiving, if I do a select after will it block
> forever ?
> >>>
> >>> Here is my code (I used czmq to make the code easier to write and
> read, I
> >>> used zeromq 3.1 for this test): https://gist.github.com/1859646
> >>>
> >>> Thanks for any answer I hate when I don't understand something ^^
> >>>
> >>
> >> I've run into this exact issue Julien. The advice I've gotten is to
> >> always call recv after send prior to calling select. I find it
> >> counterintuitive, but that's the way the devs have said it should be
> >> done.
> >>
> >> I don't think it's possible to miss a change, as long as you've called
> >> recv the exact right number of times. (don't call recv again after
> >> successfully recv'ing a message, unless you're looking to get a EFSM,
> >> no matter what people on the list might say) The edge triggering will
> >> remain valid as long as you don't select on it.
> >
> > Btw, this exact issue gave me so much trouble that I ended up just
> > switching from REP-REQ to PUSH-PULL.
>
> OK, major foot in mouth. Should have looked at the code before
> e-mailing the list.
>
> Your problem is here:
>
> int ret = select(1, &read_set, NULL, NULL, &tv);
>
> It should instead be:
>
> int ret = select(fd + 1, &read_set, NULL, NULL, &tv);
>
> The creators of select wisely chose to confuse people by naming the
> parameter numfds instead of oneplusmaxfd which is what it really
> should be named.
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20120219/e5ef64d9/attachment.htm>
More information about the zeromq-dev
mailing list