[zeromq-dev] Resource temporarily unavailable
Ashok Chippa
a.n.chippa at gmail.com
Sun Dec 25 19:20:16 CET 2011
It seems to be working with XREP-XREQ pair...
On Sat, Dec 24, 2011 at 8:31 PM, Ashok Chippa <a.n.chippa at gmail.com> wrote:
> I have gone through the "Missing Message Problem Solver" - I am using
> inproc, but as expected I am binding before connect, and I am calling
> zmq_init() only once...
>
> I am a newbie to 0MQ... Please help...
>
> Thanks,
> Ashok
>
>
> On Sat, Dec 24, 2011 at 5:36 PM, Ashok Chippa <a.n.chippa at gmail.com>wrote:
>
>> Resending after subscribing...
>>
>> I have a very simple scenario: Main process creates the socket and binds
>> (inproc://#1). Test thread creates another socket (code added after Martin
>> pointed it out) and connects (inproc://#1). Test thread then sends to the
>> main process. I am seeing "Resource temporarily unavailable" in the main
>> process, and "Operation cannot be accomplished in current state" in the
>> test thread.
>>
>> What am I doing wrong? Please help. I am in a bit of an emergency and
>> would appreciate quick response.
>>
>> Thanks,
>> Ashok
>>
>>
>> achippa at ubuntu:~/projects/groupchat$ ./client 10.1.1.1 1111
>> client started with ipaddress 10.1.1.1 port 1111
>>
>> zmq_recv on user returned "Resource temporarily unavailable"
>> connected to user socket
>> C foo
>>
>> C foo
>> zmq_send returned "Operation cannot be accomplished in current state"
>> C foo
>> zmq_send returned "Operation cannot be accomplished in current state"
>> C foo
>> zmq_send returned "Operation cannot be accomplished in current state"
>>
>>
>>
>> On Sat, Dec 24, 2011 at 4:20 PM, Ashok Chippa <a.n.chippa at gmail.com>wrote:
>>
>>> Hi,
>>>
>>> I am getting a "Resource temporarily unavailable" with a REP/XREP/DEALER
>>> socket on zmq_recv(). I have tried all three with and without ZMQ_NOBLOCK
>>> option and still see the same issue. This is with a simple inproc socket
>>> for testing.
>>>
>>> Basically, I have a process which creates a test thread. The main
>>> process opens the socket, and does a zmq_recv() in a while loop. The test
>>> thread sends messages into this socket. The zmq_send() on the test thread
>>> seems to be working (did not see any error there.) Even though I have a
>>> while loop I see the error (Resource temporarily unavailable) only once!
>>> Seems like even with ZMQ_NOBLOCK it is blocking and probably not receiving
>>> anything.
>>>
>>> What am I missing? (Not sure how to specify end point for inproc socket
>>> though.)
>>>
>>> Here's the code snippets:
>>>
>>> CREATION OF SOCKET
>>> ------------------------------------
>>>
>>> /* Create socket to talk to local user/test harness.
>>> */
>>> user = zmq_socket(context, ZMQ_DEALER);
>>> if (!user) {
>>> printf("user socket create failed: %s\n", zmq_strerror(errno));
>>> assert(0);
>>> return 0;
>>> }
>>> if (zmq_bind(user, "inproc://group_chat_client") == -1) {
>>> printf("user socket bind failed: %s\n", zmq_strerror(errno));
>>> assert(0);
>>> return 0;
>>> }
>>>
>>> WHILE LOOP
>>> --------------------
>>>
>>> while (1) {
>>> /* Check the user socket. If there is something
>>> * from the user handle it. We are basically
>>> * doing round-robin between user, requestor and
>>> * subscriber sockets. (Wonder zmq can be enhanced
>>> * to do WRR for us between multiple sockets., Better
>>> * to block on multiple sockets and unblock when a
>>> * message arrives of any one of them.)
>>> */
>>> zmq_msg_init(&msg);
>>> zmqret = zmq_recv(user, &msg, ZMQ_NOBLOCK);
>>>
>>> if (zmqret == -1) {
>>> printf("zmq_recv on user returned \"%s\"\n",
>>> zmq_strerror(errno));
>>> }
>>>
>>> if (errno != EAGAIN && errno != EWOULDBLOCK) {
>>>
>>> printf("we have something in the user socket");
>>>
>>> /* We have a server/user message. Parse it. We do not
>>> * want zmq APIs deep within our code.
>>> */
>>> gc_client_get_message(&msg, &size, &request);
>>>
>>> /* Handle the request/reply.
>>> */
>>> if (size) gc_client_handle_message(request, size);
>>> }
>>> /* Close the message.
>>> */
>>> zmq_msg_close(&msg);
>>> ...
>>> }
>>>
>>> CONNECT FROM TEST THREAD
>>> --------------------------------------------------
>>>
>>> void *
>>> test_main (void *arg)
>>> {
>>> zmq_msg_t msg;
>>> size_t size;
>>> int zmqret;
>>> uint8_t *request;
>>> char *newline;
>>> char text[256];
>>>
>>> /* Connect to the client user socket.
>>> */
>>> if (zmq_connect(user, "inproc://group_chat_client") == -1) {
>>> printf("connect to user socket failed: %s\n",
>>> zmq_strerror(errno));
>>> pthread_exit(0);
>>> }
>>> ...
>>>
>>> SEND CODE FROM TEST THREAD
>>> -----------------------------------------------------
>>> I verified the size (13 bytes)
>>>
>>> /* Send it to the parent process.
>>> */
>>> zmq_msg_init_data(&zmsg, buf, size, NULL, NULL);
>>> if (zmq_send(user, &zmsg, 0) == -1) {
>>> printf("zmq_send returned \"%s\"\n", zmq_strerror(errno));
>>> }
>>> zmq_msg_close(&zmsg);
>>>
>>>
>>>
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20111225/ba5dbe22/attachment.htm>
More information about the zeromq-dev
mailing list