From c806aabb2d3e6b1ba9e3f61319f23d45c7f9a007 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Mon, 14 Sep 2009 11:25:57 +0200 Subject: java binding sets socket options using setsockopt function --- c/zmq.h | 19 ++++---- java/Socket.cpp | 114 +++++++++++++++++++---------------------------- java/org/zmq/Socket.java | 58 +++++++----------------- src/options.cpp | 5 +-- src/options.hpp | 1 - src/socket_base.cpp | 16 ++----- 6 files changed, 77 insertions(+), 136 deletions(-) diff --git a/c/zmq.h b/c/zmq.h index 4ba8450..d2ca20a 100644 --- a/c/zmq.h +++ b/c/zmq.h @@ -44,16 +44,15 @@ extern "C" { #define ZMQ_VSM 32 // Socket options. -#define ZMQ_HWM 1 -#define ZMQ_LWM 2 -#define ZMQ_SWAP 3 -#define ZMQ_MASK 4 -#define ZMQ_AFFINITY 5 -#define ZMQ_IDENTITY 6 -#define ZMQ_SUBSCRIBE 7 -#define ZMQ_UNSUBSCRIBE 8 -#define ZMQ_RATE 9 -#define ZMQ_RECOVERY_IVL 10 +#define ZMQ_HWM 1 // int64_t +#define ZMQ_LWM 2 // int64_t +#define ZMQ_SWAP 3 // int64_t +#define ZMQ_AFFINITY 4 // int64_t +#define ZMQ_IDENTITY 5 // string +#define ZMQ_SUBSCRIBE 6 // string +#define ZMQ_UNSUBSCRIBE 7 // string +#define ZMQ_RATE 8 // int64_t +#define ZMQ_RECOVERY_IVL 9 // int64_t // The operation should be performed in non-blocking mode. I.e. if it cannot // be processed immediately, error should be returned with errno set to EAGAIN. diff --git a/java/Socket.cpp b/java/Socket.cpp index 51ee816..a7b2fe5 100644 --- a/java/Socket.cpp +++ b/java/Socket.cpp @@ -86,80 +86,60 @@ JNIEXPORT void JNICALL Java_org_zmq_Socket_finalize (JNIEnv *env, jobject obj) assert (rc == 0); } -JNIEXPORT void JNICALL Java_org_zmq_Socket_setHwm (JNIEnv *env, jobject obj, - jlong hwm) +JNIEXPORT void JNICALL Java_org_zmq_Socket_setsockopt__IJ (JNIEnv *env, + jobject obj, jint option, jlong optval) { - void *s = (void*) env->GetLongField (obj, socket_handle_fid); - assert (s); - int rc = zmq_setsockopt (s, ZMQ_HWM, &hwm, sizeof hwm); - if (rc == -1) - raise_exception (env, errno); -} - -JNIEXPORT void JNICALL Java_org_zmq_Socket_setLwm (JNIEnv *env, jobject obj, - jlong lwm) -{ - void *s = (void*) env->GetLongField (obj, socket_handle_fid); - assert (s); - - int rc = zmq_setsockopt (s, ZMQ_LWM, &lwm, sizeof lwm); - if (rc == -1) - raise_exception (env, errno); -} - -JNIEXPORT void JNICALL Java_org_zmq_Socket_setSwap (JNIEnv *env, jobject obj, - jlong swap_size) -{ - void *s = (void*) env->GetLongField (obj, socket_handle_fid); - assert (s); - - int rc = zmq_setsockopt (s, ZMQ_SWAP, &swap_size, sizeof swap_size); - if (rc == -1) - raise_exception (env, errno); -} - -JNIEXPORT void JNICALL Java_org_zmq_Socket_setMask (JNIEnv *env, jobject obj, - jlong mask) -{ - void *s = (void*) env->GetLongField (obj, socket_handle_fid); - assert (s); - - int rc = zmq_setsockopt (s, ZMQ_MASK, &mask, sizeof mask); - if (rc == -1) - raise_exception (env, errno); -} - -JNIEXPORT void JNICALL Java_org_zmq_Socket_setAffinity (JNIEnv *env, - jobject obj, jlong affinity) -{ - void *s = (void*) env->GetLongField (obj, socket_handle_fid); - assert (s); - - int rc = zmq_setsockopt (s, ZMQ_AFFINITY, &affinity, sizeof affinity); - if (rc == -1) - raise_exception (env, errno); + switch (option) { + case ZMQ_HWM: + case ZMQ_LWM: + case ZMQ_SWAP: + case ZMQ_AFFINITY: + case ZMQ_RATE: + case ZMQ_RECOVERY_IVL: + { + void *s = (void*) env->GetLongField (obj, socket_handle_fid); + assert (s); + + int64_t value = optval; + int rc = zmq_setsockopt (s, option, &value, sizeof (value)); + if (rc != 0) + raise_exception (env, errno); + return; + } + default: + raise_exception (env, EINVAL); + return; + } } -JNIEXPORT void JNICALL Java_org_zmq_Socket_setIdentity (JNIEnv *env, - jobject obj, jstring identity) +JNIEXPORT void JNICALL Java_org_zmq_Socket_setsockopt__ILjava_lang_String_2 ( + JNIEnv *env, jobject obj, jint option, jstring optval) { - void *s = (void*) env->GetLongField (obj, socket_handle_fid); - assert (s); - - if (identity == NULL) { + switch (option) { + case ZMQ_IDENTITY: + case ZMQ_SUBSCRIBE: + case ZMQ_UNSUBSCRIBE: + { + if (optval == NULL) { + raise_exception (env, EINVAL); + return; + } + + void *s = (void*) env->GetLongField (obj, socket_handle_fid); + assert (s); + + const char *value = env->GetStringUTFChars (optval, NULL); + assert (value); + int rc = zmq_setsockopt (s, option, value, strlen (value)); + env->ReleaseStringUTFChars (optval, value); + if (rc != 0) + raise_exception (env, errno); + return; + } + default: raise_exception (env, EINVAL); return; } - - const char *c_identity = env->GetStringUTFChars (identity, NULL); - if (c_identity == NULL) - return; - - int rc = zmq_setsockopt (s, ZMQ_IDENTITY, c_identity, sizeof c_identity); - env->ReleaseStringUTFChars (identity, c_identity); - - if (rc == -1) - raise_exception (env, errno); } JNIEXPORT void JNICALL Java_org_zmq_Socket_bind (JNIEnv *env, jobject obj, diff --git a/java/org/zmq/Socket.java b/java/org/zmq/Socket.java index 4c6a3d3..0d96c71 100644 --- a/java/org/zmq/Socket.java +++ b/java/org/zmq/Socket.java @@ -27,19 +27,24 @@ public class Socket } public static final int NOBLOCK = 1; - public static final int NOFLUSH = 2; public static final int P2P = 0; - public static final int PUB = 1; - public static final int SUB = 2; - public static final int REQ = 3; - public static final int REP = 4; + public static final int HWM = 1; + public static final int LWM = 2; + public static final int SWAP = 3; + public static final int AFFINITY = 4; + public static final int IDENTITY = 5; + public static final int SUBSCRIBE = 6; + public static final int UNSUBSCRIBE = 7; + public static final int RATE = 8; + public static final int RECOVERY_IVL = 9; + /** * Class constructor. * @@ -51,46 +56,13 @@ public class Socket } /** - * Set the high watermark on the socket. - * - * @param hwm high watermark. - */ - public native void setHwm (long hwm); - - /** - * Set the low watermark on the socket. - * - * @param lwm low watermark. - */ - public native void setLwm (long lwm); - - /** - * Set swap size. - * - * @param swap_size swap size. - */ - public native void setSwap (long swap_size); - - /** - * Set reception mask. - * - * @param mask mask. - */ - public native void setMask (long mask); - - /** - * Set affinity. - * - * @param affinity - */ - public native void setAffinity (long affinity); - - /** - * Set identity. + * Set the socket option value. * - * @param identity + * @param option ID of the option to set + * @param optval value to set the option to */ - public native void setIdentity (String identity); + public native void setsockopt (int option, long optval); + public native void setsockopt (int option, String optval); /** * Bind to network interface. Start listening for new connections. diff --git a/src/options.cpp b/src/options.cpp index 804cb4f..a39d312 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -23,9 +23,8 @@ zmq::options_t::options_t () : hwm (0), lwm (0), swap (0), - mask (0), affinity (0), - rate (0), - recovery_ivl (0) + rate (100), + recovery_ivl (10) { } diff --git a/src/options.hpp b/src/options.hpp index 9f4a264..4d359e3 100644 --- a/src/options.hpp +++ b/src/options.hpp @@ -34,7 +34,6 @@ namespace zmq int64_t hwm; int64_t lwm; int64_t swap; - uint64_t mask; uint64_t affinity; std::string identity; diff --git a/src/socket_base.cpp b/src/socket_base.cpp index 9412d67..0429726 100644 --- a/src/socket_base.cpp +++ b/src/socket_base.cpp @@ -125,14 +125,6 @@ int zmq::socket_base_t::setsockopt (int option_, const void *optval_, options.swap = *((int64_t*) optval_); return 0; - case ZMQ_MASK: - if (optvallen_ != sizeof (int64_t)) { - errno = EINVAL; - return -1; - } - options.mask = (uint64_t) *((int64_t*) optval_); - return 0; - case ZMQ_AFFINITY: if (optvallen_ != sizeof (int64_t)) { errno = EINVAL; @@ -151,19 +143,19 @@ int zmq::socket_base_t::setsockopt (int option_, const void *optval_, return -1; case ZMQ_RATE: - if (optvallen_ != sizeof (uint32_t)) { + if (optvallen_ != sizeof (int64_t)) { errno = EINVAL; return -1; } - options.rate = *((int32_t*) optval_); + options.rate = (uint32_t) *((int64_t*) optval_); return 0; case ZMQ_RECOVERY_IVL: - if (optvallen_ != sizeof (uint32_t)) { + if (optvallen_ != sizeof (int64_t)) { errno = EINVAL; return -1; } - options.recovery_ivl = *((int32_t*) optval_); + options.recovery_ivl = (uint32_t) *((int64_t*) optval_); return 0; default: -- cgit v1.2.3