/*
* call-seq:
* POSIX_MQ.for_fd(socket) => mq
*
* Adopts a socket as a POSIX message queue. Argument will be
* checked to ensure it is a POSIX message queue socket.
*
* This is useful for adopting systemd sockets passed via the
* ListenMessageQueue directive.
* Returns a +POSIX_MQ+ instance. This method is only available
* under Linux and FreeBSD and is not intended to be portable.
*
*/
static VALUE for_fd(VALUE klass, VALUE socket)
{
VALUE mqv = alloc(klass);
struct posix_mq *mq = get(mqv, 0);
mqd_t mqd;
mq->name = Qnil;
mqd = FD_TO_MQD(NUM2INT(socket));
if (mq_getattr(mqd, &mq->attr) < 0)
rb_sys_fail("provided file descriptor is not a POSIX MQ");
mq->des = mqd;
return mqv;
}