[zeromq-dev] Requesting suggestions for getsockopt() in Java
gonzalo diethelm
gdiethelm at dcv.cl
Wed Aug 11 16:06:24 CEST 2010
> I took that to mean they have those two low-level native methods
> (probably declared as protected or private), and implement all the
> high-level methods (such as the ones I listed for 0MQ) by calling
those
> two. This would make sense to me (#1).
>
> It also makes sense (in an OO world) to NOT use the "Socket" word;
these
> are socket objects anyway, so we should have setHWM() and getRate()
> (#2).
>
> Finally, if we go this way I would like to deprecate (or simply
> eliminate) the two setsockopt() methods and all the socket option
> constants that are declared in ZMQ.java (#3).
I have just committed a change that eliminates the two setsockopt()
methods in the Socket class and adds the following methods:
long getHWM();
long getSwap();
long getAffinity();
String getIdentity();
long getRate();
long getRecoveryInterval();
boolean getMulticastLoop();
long getSendBufferSize();
long getReceiveBufferSize();
boolean getReceiveMore();
void setHWM(long hwm);
void setSwap(long swap);
void setAffinity(long affinity);
void setIdentity(String identity);
void setSubscribe(String subscribe);
void setUnsubscribe(String unsubscribe);
void setRate(long rate);
void setRecoveryInterval(long recovery_ivl);
void setMulticastLoop(boolean mcast_loop);
void setSendBufferSize(long sndbuf);
void setReceiveBufferSize(long rcvbuf);
There are three methods "missing" because they don't really make sense:
String getSubscribe();
String getUnsubscribe();
void setReceiveMore(boolean rcvmore);
I went the easy road and simply added four native methods to implement
all the previous ones; a further refinement might be to coalesce these
four into two methods using Object (I have no definite plans to do
this):
protected native long getLongSockopt (int option);
protected native String getStringSockopt (int option);
protected native void setLongSockopt (int option,
long optval);
protected native void setStringSockopt (int option,
String optval);
Now, some comments.
1. I have doubts regarding the use of String vs. byte[] for things like
setIdentity() and getIdentity(); I am not sure how those methods will
behave in the presence of strings with '\0' embedded in them.
2. I also have doubts regarding the use of long vs. int in all these
methods. Does it make any difference?
3. Finally, the 0MQ documentation sometimes uses int64_t and sometimes
uint64_t for several of the socket options, even mixing the two types
for a given option when setting or getting it. Is this on purpose?
--
Gonzalo Diethelm
More information about the zeromq-dev
mailing list