/*
* 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;
}