gpt4 book ai didi

c - mq_timedreceive 报告 EAGAIN 错误且未设置 O_NONBLOCK

转载 作者:行者123 更新时间:2023-11-30 16:48:04 25 4
gpt4 key购买 nike

发送到 mq_timedreceivetimespec 设置为 20 秒。 20 秒过去后,errno 返回“资源暂时不可用”(EAGAIN)。此外,这会发送一个信号并使进程崩溃。我期望发生的是 ETIMEDOUT 响应和我的代码继续执行。我已确保队列没有使用 O_NONBLOCK,因此不应该有 EAGAIN

的原因
event_type get_event_timed(mqd_t channel, struct timespec ts) {
//get timed touch event from devi-atmel-mxt
ssize_t ret = -1;
char Buffer[ASYNC_BUFFER_SIZE] = {0};

event_type *event;

//mq_monotonic will block for duration specfifed by timespec
//will return -1 && ETIMEDOUT if no event withing duration
ret = mq_timedreceive(channel, Buffer, ASYNC_BUFFER_SIZE, NULL, &ts);
if ((-1 == ret) && (errno == ETIMEDOUT)) {
slogf(_SLOGC_INPUT, _SLOG_ERROR, "[ASYNC_LOGGER] %s TIMEDOUT\n", __func__);
//return TIMEDOUT
*event = TIMEDOUT;
}
else if (-1 == ret) {
slogf(_SLOGC_INPUT, _SLOG_ERROR, "[ASYNC_LOGGER] %s error: %s\n", __func__, strerror(errno));
//return ERROR
*event = ERROR;
}
else {
//printf("mq_recieve sucess\n");
slogf(_SLOGC_INPUT, _SLOG_ERROR, "[ASYNC_LOGGER] get_event_timed: mq_recieve success\n");
//casting buffer into event_type
event = (event_type *)Buffer;
}
slogf(_SLOGC_INPUT, _SLOG_ERROR, "[ASYNC_LOGGER] %s buffer is: %d\n", __func__, *event);
return *event;
}

最佳答案

这是 QNX 中的一个已知错误。由于队列同时也为空,因此 mq 无法识别 ETIMEDOUT 和 O_NONBLOCK。

关于c - mq_timedreceive 报告 EAGAIN 错误且未设置 O_NONBLOCK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43127708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com