[zeromq-dev] type safe sockets

john skaller skaller at users.sourceforge.net
Sun Feb 12 00:49:25 CET 2012


On 12/02/2012, at 9:04 AM, john skaller wrote:
[]

Ok, this is done. To use the patch (when it's pulled) convert your code to use

zmq_socket_t
zmq_ctx_t

instead of void*. in 3.x, these are defined to void * anyhow.

To check you code, do this:

#define ZMQ_EMULATE_TYPE_SAFE
#include <zmq.h>

The compiler will barf where you're still using a void*. Fix it.
When you get bored, just remove the #define.

If you want to you can also 

#define ZMQ_TYPE_SAFE

and that forces the type safe interface, and

#define ZMQ_TYPE_UNSAFE

forces the unsafe interface. So in 4.0 you can still use the old
interface, and in 3.1 you can try out the new one.

The implementation technique cheats. It assumes a struct
containing a void * will be passed the same way as a void*.
If your compiler does not do this, all hell will break loose.
This only matters if you're using the type safe interface.

The cheat is there so you don't need two versions of the zmq 
library binary to commence any upgrades. if you use the emulation
technique, it doesn't matter. The idea is that you can check the
safety of your program, and even if the linked program crashes,
you can just remove the switch and recompile your app:
the type safety checks have been done, removing the switch
doesn't undo any fixes you made to your program.

--
john skaller
skaller at users.sourceforge.net







More information about the zeromq-dev mailing list