help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Zero_mq stacked while receiving msg


From: JohnD
Subject: RE: Zero_mq stacked while receiving msg
Date: Thu, 25 Apr 2019 17:20:50 -0400


> -----Original Message-----
> From: Ardid, Salva [mailto:address@hidden
> Sent: Thursday, April 25, 2019 4:20 PM
> To: JohnD
> Cc: address@hidden
> Subject: Re: Zero_mq stacked while receiving msg
> 
> 
> El dijous, 25 d’abril de 2019, a les 15:45:05 EDT, JohnD va escriure:
> 
> 
>   From: Ardid, Salva [mailto:address@hidden
>   Sent: Thursday, April 25, 2019 12:37 PM
>   To: John Donoghue
>   Cc: address@hidden
>   Subject: Zero_mq stacked while receiving msg
> 
>   Unfortunately the receive function below gets stacked in Octave (i.e., when
> obj.isMatlab == 0 ) at the zmq_recv call and I don’t have a clue what might be
> wrong or how to fix it. Please note that other calls to the function seem to 
> work
> fine, and then for whatever reason one of them gets trapped. I tried changing
> the number of bits to very large numbers with no difference. Any help is more
> than appreciated.
>   function str = receive(obj)
>               if obj.isMatlab
>                   msg = libstruct('zmq_msg_t', struct('hidden', zeros(1, 64, 
> 'uint8')));
>                   calllib('libzmq', 'zmq_msg_init', msg); % always returns 0
>                   msglen = calllib('libzmq', 'zmq_msg_recv', msg, obj.socket, 
> 0);
>                   assert(msglen >= 0, obj.errortext('zmq_msg_recv'));
>                   msgptr = calllib('libzmq', 'zmq_msg_data', msg);
>                   if not(msgptr.isNull)
>                       setdatatype(msgptr, 'uint8Ptr', 1, msglen);
>                       str = uint8(msgptr.Value);
>                   else
>                       str = uint8([]);
>                   end
>                   err = calllib('libzmq', 'zmq_msg_close', msg);
>                   assert(err == 0, obj.errortext('zmq_msg_close'));
>               else
>                   % this is all transparent in Octave (internally managed by 
> zmq_recv)
>                   str = zmq_recv (obj.socket, 64, 0);
>               end
>           end
> 
> 
>   --------------------------------------
> 
>   Stacked ? Not sure what that means.
> 
>   Note that in your malab code,  the 'zmq_msg_t' structure that is 64 bytes in
> size
>   That’s not the same as saying the received data will be 64 bytes in length
> 
>   So just out of interest sake, try a larger zmq_recv size ... 1024 ?
> 
>   Which version of libzmq are you using ?
> 
> 
> Hi John,
> 
> Thanks for your email.
> 
> "Stacked" means that nothing seems to happen, if I run the code with some
> verbose info I get:
> 
> > python3 pyTransplantOctaveTest.py
> zeromq loaded
> socket done
> connection done
> receiving msg
> msg received
> sending msg
> msg sent
> receiving msg
> msg received
> sending msg
> msg sent
> receiving msg
> msg received
> sending msg
> msg sent
> receiving msg
> 
> And then it stays in last `receiving message` for ever without actually 
> receiving
> it (it would be indicated by `msg received`)
> 
> I know, 64 does not need to be the maximum number, however changing that
> number didn't change the behavior. I set it up to 2^31-1, because that is what
> the maximum seems to be in the python side according to an exception
> (response = msgpack.unpackb(self.socket.recv(), raw=False,
> max_bin_len=2**31-1)
> 
> I use libzmq 4.2.5
> 
> I don't see what might be wrong. Any help is more than welcome.
> 
> Thanks,
> Salva
> 


Is it possible that whatever is sending the message is failing or considering 
that a message sent is invalid and not responding back with a reply ?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]