POSIX-RT-MQ

 view release on metacpan or  search on metacpan

MQ.xs  view on Meta::CPAN

        RETVAL

void 
mq_receive(mqdes, msg_max_len)
        mqd_t        mqdes
        size_t       msg_max_len
    PREINIT:
        char*        msg_ptr;
        ssize_t      msg_len;
        unsigned int msg_prio;
    PPCODE:
        if ((msg_ptr = malloc(msg_max_len)) == NULL) { XSRETURN_EMPTY; }        
        msg_len = mq_receive(mqdes, msg_ptr, msg_max_len, &msg_prio);
        if (msg_len == -1)
        { 
            free(msg_ptr);
            XSRETURN_EMPTY;
        }
        XPUSHs(sv_2mortal(newSVpvn(msg_ptr, msg_len)));
        XPUSHs(sv_2mortal(newSVuv(msg_prio)));
        free(msg_ptr);

MQ.xs  view on Meta::CPAN

void
mq_timedreceive(mqdes, msg_max_len, seconds)
        mqd_t        mqdes
        size_t       msg_max_len
        unsigned int seconds

    PREINIT:
        char*        msg_ptr;
        ssize_t      msg_len;
        unsigned int msg_prio;
    PPCODE:
        struct timespec abs_timeout;
        clock_gettime(CLOCK_REALTIME, &abs_timeout);
        abs_timeout.tv_sec += seconds;
        if ((msg_ptr = malloc(msg_max_len)) == NULL) { XSRETURN_EMPTY; }
        msg_len = mq_timedreceive(mqdes, msg_ptr, msg_max_len, &msg_prio,
        &abs_timeout);
        if (msg_len == -1)
        {
            free(msg_ptr);
            XSRETURN_EMPTY;

MQ.xs  view on Meta::CPAN

        RETVAL = newSVpvn((char*)&mqa, sizeof(mqa));
    OUTPUT:
        RETVAL

void
mq_attr_unpack(mqa)
        SV* mqa
    PREINIT:
        struct mq_attr* mqa_ptr;
        STRLEN          mqa_len;
    PPCODE:
        mqa_ptr = (struct mq_attr*) SvPV(mqa, mqa_len); 
        /* check mqa_len ? */
        XPUSHs(sv_2mortal(newSViv(mqa_ptr->mq_flags)));
        XPUSHs(sv_2mortal(newSViv(mqa_ptr->mq_maxmsg)));
        XPUSHs(sv_2mortal(newSViv(mqa_ptr->mq_msgsize)));
        XPUSHs(sv_2mortal(newSViv(mqa_ptr->mq_curmsgs)));



( run in 0.483 second using v1.01-cache-2.11-cpan-5511b514fd6 )