/*
 * Document-method: new
 *
 * call-seq:
 *   new(io_threads=1)
 *
 * Initializes a new 0MQ context. The io_threads argument specifies the size
 * of the 0MQ thread pool to handle I/O operations. If your application is
 * using only the _inproc_ transport for you may set this to zero; otherwise,
 * set it to at least one.
 */

static VALUE context_initialize (int argc_, VALUE* argv_, VALUE self_)
{
    VALUE io_threads;
    rb_scan_args (argc_, argv_, "01", &io_threads);

    assert (!DATA_PTR (self_));
    void *ctx = zmq_init (NIL_P (io_threads) ? 1 : NUM2INT (io_threads));
    if (!ctx) {
        rb_raise (rb_eRuntimeError, "%s", zmq_strerror (zmq_errno ()));
        return Qnil;
    }

    DATA_PTR (self_) = (void*) ctx;
    return self_;
}