On Jan 18, 2012, at 10:41 AM, Staffan Gimåker wrote:

> Do you have any opinions on how the public API for this should look? I've 
> started implementing this stuff so it'd be nice to know sooner rather than 
> later :D
> 
> I'm thinking along the lines of just adding more socketops for this, e.g.:
> 
>   zmq_setsockopt(sock, ZMQ_SUBSCRIBE_EXACT, topic, topic_len);
> 
> Any other suggestions?

I think that is a good start. Once the code is working and available for other 
people to bang on, we'll get more input. Let me think out loud for a little 
here to see what everyone likes...

Alternative #1

I agree that zmq_setsockopt() is the place to put it. I would recommend making 
two new enums, one more exact matching and the second to eventually replace a 
"deprecated" ZMQ_SUBSCRIBE option.

e.g.

#define ZMQ_SUBSCRIBE_PREFIX_MATCH ZMQ_SUBSCRIBE
#define ZMQ_SUBSCRIBE_EXACT_MATCH <int>

This would provide some room to grow if the library were to ever get a more 
complex matching mechanism like regular expressions.

#define ZMQ_SUBSCRIBE_REGEX_MATCH <int>


On the flip side, we also need to be able to delete/unsubscribe with these 
filters.

#define ZMQ_UNSUBSCRIBE_PREFIX_MATCH ZMQ_UNSUBSCRIBE
#define ZMQ_UNSUBSCRIBE_EXACT_MATCH <int>
etc


Alternative #2

We deprecate the use of zmq_setsockopt() for setting subscription filters and 
create a dedicated mechanism for accomplishing this task.

e.g.
zmq_setsockfilter(void * socket, int operation, void * operation_value, size_t 
operation_len);

This new API call would only work with ZMQ_SUB sockets. Passing any other 
socket type would return the appropriate error (-1) and set errno to ENOTSUP.

All of the suggested #defines from above would be the same here.

cr

_______________________________________________
zeromq-dev mailing list
[email protected]
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to