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 <[email protected]> wrote: > On Sat, Feb 18, 2012 at 5:32 PM, Yi Ding <[email protected]> wrote: > > On Sat, Feb 18, 2012 at 5:31 PM, Yi Ding <[email protected]> wrote: > >> On Sat, Feb 18, 2012 at 8:59 AM, Schmurfy <[email protected]> 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 > [email protected] > http://lists.zeromq.org/mailman/listinfo/zeromq-dev >
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
