POSIX-RT-MQ
view release on metacpan or search on metacpan
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);
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;
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 )