In your code the ReceiveMessage function is using the zmq_msg_recv function with depending on the value of the "flags" variable blocks until a message is received and, while blocked, this socket will not be able to send anything. You should use a non blocking recv method and poll for messages or use the built-in zmq poller mechanism. Em 10/04/2013 01:14, "Lucas Hope" <[email protected]> escreveu:
> The router has to receive a message from the dealer first, so the return > envelope/s can be determined. After that, I don't think there are any > restrictions. > > > On Wed, Apr 10, 2013 at 1:06 PM, A. Mark <[email protected]> wrote: > >> It is difficult to help without understanding more detail about your >> application, in general yes you can send/recv in any order on router/dealer. >> >> >> On Tue, Apr 9, 2013 at 3:38 PM, Rahul & Piyali Ray < >> [email protected]> wrote: >> >>> Hi Gurus, >>> I have implemented a dealer (server) and router ( as server) using >>> zmq. I would like my application to use dealer or router to both send and >>> receive messages, something like a dealer can send and receive message. Is >>> this possible ? Please see the code that I have written. This works for one >>> way connection ( dealer sends, router receives). But I want it both >>> ways...dealer to receive from router on the same port over the network. Can >>> you please help me find what I am missing ? >>> >>> Thanks, >>> Tufan >>> >>> code: >>> >>> int MessageClient::SendMessage(list<string> stringList) >>> 181 { >>> 182 >>> 183 int returnvalue = -1; >>> 184 int count = stringList.size(); >>> 185 for(list<string>::const_iterator sitterator = >>> stringList.begin(); >>> 186 sitterator != stringList.end(); sitterator++) >>> 187 { >>> 188 string stringName = *sitterator; >>> 189 int length = stringName.length(); >>> 190 int flag = count - 1; >>> 191 count--; >>> 192 void* value = &stringName; >>> 193 printf("message is %s", stringName); >>> 194 if(flag > 0) >>> 195 returnvalue = zmq_send(socket, value, length, >>> PM_SNDMORE); >>> 196 else >>> 197 returnvalue = zmq_send(socket, value, length, flag); >>> 198 >>> 199 assert (returnvalue == 1); >>> 200 } >>> 201 return returnvalue; >>> 202 } >>> >>> >>> char* MessageClient::ReceiveMessage( int flags) >>> 219 { >>> 220 zmq_msg_t zmqMessage; >>> 221 zmq_msg_init(&zmqMessage); >>> 222 int size = zmq_msg_recv(&zmqMessage,socket,flags); >>> 223 if(size == -1) >>> 224 { >>> 225 printf(" no message"); >>> 226 return (NULL); >>> 227 } >>> 228 char *string = (char *)malloc(size + 1); >>> 229 memcpy(string, zmq_msg_data(&zmqMessage), size); >>> 230 zmq_msg_close(&zmqMessage); >>> 231 string[size] = 0; >>> 232 return string; >>> 233 } >>> 234 >>> >>> >>> >>> >>> _______________________________________________ >>> 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 >> >> > > > -- > --------------------------------------------------- > Dr Lucas Hope - lucas.r.hope@skype > Machine Learning and Software Engineering Consultant > Melbourne, Australia > > _______________________________________________ > 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
