Hi
At the bottom of this message you may find a simple test program for
DEALER<->ROUTER socket pair.
It sends test message from dealer to router and then back.
It works fine with 3.0.x, but with 3.1 HEAD blocks on second
zmq_recvmsg() ,please see inline comment.
My test platform Win7, build target - Win32/Debug.
Is something changed in DEALER-ROUTER behavior or it is just a bug?!
Regards
Alexander
#include "zmq.h"
int main(int argc, char* argv[])
{
void* context1 = zmq_init( 1 );
void* dealer = zmq_socket( context1, ZMQ_DEALER );
zmq_connect( dealer, "tcp://127.0.0.1:5555" );
void* context2 = zmq_init( 1 );
void* router = zmq_socket( context2, ZMQ_ROUTER );
zmq_bind( router, "tcp://*:5555" );
{
zmq_msg_t msg;
zmq_msg_init_size( &msg, 16 );
memset( zmq_msg_data( &msg ), 1, 16 );
zmq_sendmsg( dealer, &msg, 0 );
zmq_msg_close( &msg );
}
zmq_pollitem_t items [] =
{
{ router, 0, ZMQ_POLLIN, 0 }
};
zmq_poll( items, 1, 1500 );
if( items [0].revents & ZMQ_POLLIN )
{
zmq_msg_t msg;
// first message should be "reply-address"
zmq_msg_init( &msg );
zmq_recvmsg( router, &msg, 0 );
size_t size = zmq_msg_size( &msg );
zmq_sendmsg( router, &msg, ZMQ_SNDMORE );
zmq_msg_close( &msg );
// we always expect second message immediately
zmq_msg_init( &msg );
zmq_recvmsg( router, &msg, 0 ); // blocked here!!
zmq_msg_close( &msg );
zmq_msg_init_size( &msg, 16 );
memset( zmq_msg_data( &msg ), 2, 16 );
zmq_sendmsg( router, &msg, 0 );
zmq_msg_close( &msg );
}
{
zmq_pollitem_t items [] =
{
{ dealer, 0, ZMQ_POLLIN, 0 }
};
zmq_poll( items, 1, 1500 );
if( items [0].revents & ZMQ_POLLIN )
{
zmq_msg_t msg;
zmq_msg_init( &msg );
zmq_recvmsg( dealer, &msg, 0 );
zmq_msg_close( &msg );
}
}
zmq_close( dealer );
zmq_close( router );
zmq_term( context1 );
zmq_term( context2 );
}
_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev