/*
 * call-seq:
 *      mq.nonblock = boolean        => boolean
 *
 * Enables or disables non-blocking operation for the message queue
 * descriptor.  Errno::EAGAIN will be raised in situations where
 * the queue would block.  This is not compatible with +timeout+
 * arguments to POSIX_MQ#send and POSIX_MQ#receive.
 */
static VALUE setnonblock(VALUE self, VALUE nb)
{
        struct mq_attr newattr;
        struct posix_mq *mq = get(self, 1);

        if (nb == Qtrue)
                newattr.mq_flags = O_NONBLOCK;
        else if (nb == Qfalse)
                newattr.mq_flags = 0;
        else
                rb_raise(rb_eArgError, "must be true or false");

        if (mq_setattr(mq->des, &newattr, &mq->attr) < 0)
                rb_sys_fail("mq_setattr");

        mq->attr.mq_flags = newattr.mq_flags;

        return nb;
}