[prev in list] [next in list] [prev in thread] [next in thread] 

List:       zeromq-dev
Subject:    [zeromq-dev] zmq_disconnect and zmq_close fails
From:       Laurent Alebarde <l.alebarde () free ! fr>
Date:       2014-01-30 18:25:05
Message-ID: 52EA9901.3020002 () free ! fr
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hi all,

I have a test that makes zmq_disconnect and zmq_close fail (in the frame 
of developments on libzmq itself, but besides that, all tests pass).


*Test 1:*
     void *worker = zmq_socket (ctx, ZMQ_DEALER);
     assert (worker);
     int linger_time = 100;
//    rc = zmq_setsockopt (worker, ZMQ_LINGER, &linger_time, 
sizeof(linger_time));
//    assert (rc == 0);
     rc = zmq_connect (worker, "inproc://backend");
     assert (rc == 0);

// do some stuff

     rc = zmq_disconnect (worker, "inproc://backend");
     printf("Error: zmq_disconnect failed: %s (%d)\n", 
zmq_strerror(errno), zmq_errno());
     assert (rc == 0);
     rc = zmq_connect (worker, "tcp://127.0.0.1:9999");
     assert (rc == 0);

The output is:
Error: zmq_disconnect failed: Resource temporarily unavailable (11)

Moreover, if I suppress this zmq_disconnect command and execute the next 
one which is a zmq_connect, it looks like it is not connected to the new 
address.

*Test 2:*
     void *worker = zmq_socket (ctx, ZMQ_DEALER);
     assert (worker);
     int linger_time = 100;
//    rc = zmq_setsockopt (worker, ZMQ_LINGER, &linger_time, 
sizeof(linger_time));
//    assert (rc == 0);
     rc = zmq_connect (worker, "inproc://backend");
     assert (rc == 0);

// do some stuff

     rc = zmq_close (worker);
     printf("Error: zmq_disconnect failed: %s (%d)\n", 
zmq_strerror(errno), zmq_errno());
     assert (rc == 0);
     void *worker = zmq_socket (ctx, ZMQ_DEALER);
     assert (worker);
     rc = zmq_connect (worker, "tcp://127.0.0.1:9999");
     assert (rc == 0);

The output is:
Error: zmq_disconnect failed: Resource temporarily unavailable (11)


If I add some linger time to the worker socket, it changes nothing.

To what I could read, this errno = 11 indicates Resource Temporarily 
Unavailable.

Any idea please ?

Laurent



[Attachment #5 (text/html)]

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000066" bgcolor="#FFFFFF">
    <font face="Arial">Hi all,<br>
      <br>
      I have a test that makes zmq_disconnect and zmq_close fail (in the
      frame of developments on libzmq itself, but besides that, all
      tests pass). <br>
      <br>
      <br>
      <b>Test 1:</b><br>
      <font face="Courier">&nbsp;&nbsp;&nbsp; void *worker = zmq_socket (ctx,
        ZMQ_DEALER);<br>
        &nbsp;&nbsp;&nbsp; assert (worker);<br>
        &nbsp;&nbsp;&nbsp; int linger_time = 100;<br>
        // &nbsp;&nbsp; rc = zmq_setsockopt (worker, ZMQ_LINGER, &amp;linger_time,
        sizeof(linger_time));<br>
        // &nbsp;&nbsp; assert (rc == 0);<br>
        &nbsp;&nbsp;&nbsp; rc = zmq_connect (worker, "inproc://backend");<br>
        &nbsp;&nbsp;&nbsp; assert (rc == 0);<br>
        <br>
        // do some stuff<br>
        <br>
        &nbsp;&nbsp;&nbsp; rc = zmq_disconnect (worker, "inproc://backend");<br>
        &nbsp;&nbsp;&nbsp; printf("Error: zmq_disconnect failed: %s (%d)\n",
        zmq_strerror(errno), zmq_errno());<br>
        &nbsp;&nbsp;&nbsp; assert (rc == 0);<br>
        &nbsp;&nbsp;&nbsp; rc = zmq_connect (worker, "tcp://127.0.0.1:9999");<br>
        &nbsp;&nbsp;&nbsp; assert (rc == 0);<br>
        <br>
      </font>The output is:<br>
    </font><font face="Arial"><font face="Arial"><font face="Arial"><font
            face="Courier New, Courier, monospace">Error: zmq_disconnect
            failed: Resource temporarily unavailable (11)<br>
          </font></font></font><br>
    </font><font face="Arial">Moreover, if I suppress this
      zmq_disconnect command and execute the next one which is a
      zmq_connect, it looks like it is not connected to the new address.<br>
      <br>
    </font><font face="Arial"><font face="Arial"><b>Test 2:</b><br>
        <font face="Courier">&nbsp;&nbsp;&nbsp; void *worker = zmq_socket (ctx,
          ZMQ_DEALER);<br>
          &nbsp;&nbsp;&nbsp; assert (worker);<br>
          &nbsp;&nbsp;&nbsp; int linger_time = 100;<br>
          // &nbsp;&nbsp; rc = zmq_setsockopt (worker, ZMQ_LINGER,
          &amp;linger_time, sizeof(linger_time));<br>
          // &nbsp;&nbsp; assert (rc == 0);<br>
          &nbsp;&nbsp;&nbsp; rc = zmq_connect (worker, "inproc://backend");<br>
          &nbsp;&nbsp;&nbsp; assert (rc == 0);<br>
          <br>
          // do some stuff<br>
          <br>
          &nbsp;&nbsp;&nbsp; rc = zmq_close (worker);<br>
          &nbsp;&nbsp;&nbsp; printf("Error: zmq_disconnect failed: %s (%d)\n",
          zmq_strerror(errno), zmq_errno());<br>
          &nbsp;&nbsp;&nbsp; assert (rc == 0);<br>
          &nbsp;&nbsp;&nbsp; void *worker = zmq_socket (ctx, ZMQ_DEALER);<br>
          &nbsp;&nbsp;&nbsp; assert (worker);<br>
          &nbsp;&nbsp;&nbsp; rc = zmq_connect (worker, "tcp://127.0.0.1:9999");<br>
          &nbsp;&nbsp;&nbsp; assert (rc == 0);<br>
          <br>
        </font>The output is:<br>
        <font face="Courier New, Courier, monospace">Error:
          zmq_disconnect failed: Resource temporarily unavailable (11)<br>
        </font><br>
        <br>
        I</font>f I add some linger time to the worker socket, it
      changes nothing.<br>
      <br>
      To what I could read, this errno = 11 indicates Resource
      Temporarily Unavailable.<br>
      <br>
      Any idea please ?<br>
      <br>
      Laurent<br>
      <br>
      <br>
    </font>
  </body>
</html>


_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic