summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/pyzmq.cpp31
1 files changed, 23 insertions, 8 deletions
diff --git a/python/pyzmq.cpp b/python/pyzmq.cpp
index c550eb5..47478e0 100644
--- a/python/pyzmq.cpp
+++ b/python/pyzmq.cpp
@@ -140,14 +140,29 @@ PyObject *socket_setsockopt (socket_t *self, PyObject *args, PyObject *kwdict)
}
int rc;
- if (PyInt_Check (optval)) {
- int val = PyInt_AsLong (optval);
- rc = zmq_setsockopt (self->handle, option, &val, sizeof (int));
- }
- if (PyString_Check (optval))
- rc = zmq_setsockopt (self->handle, option, PyString_AsString (optval),
- PyString_Size (optval));
- else {
+
+ switch (option) {
+ case ZMQ_HWM:
+ case ZMQ_LWM:
+ case ZMQ_SWAP:
+ case ZMQ_AFFINITY:
+ case ZMQ_RATE:
+ case ZMQ_RECOVERY_IVL:
+ case ZMQ_MCAST_LOOP:
+ {
+ int val = PyInt_AsLong (optval);
+ rc = zmq_setsockopt (self->handle, option, &val, sizeof (int));
+ break;
+ }
+ case ZMQ_IDENTITY:
+ case ZMQ_SUBSCRIBE:
+ case ZMQ_UNSUBSCRIBE:
+
+ rc = zmq_setsockopt (self->handle, option, PyString_AsString (optval),
+ PyString_Size (optval));
+ break;
+
+ default:
rc = -1;
errno = EINVAL;
}