Страница man для mq_send
указывает, что она реализована поверх mq_timedsend
, который является системным вызовом в Linux. Системные вызовы, как правило, являются атомарными в том смысле, что они либо успешны, либо нет. Если системный вызов прерывается сигналом, обычное поведение - вернуть -1 и установить errno
в EINTR
. Похоже, что mq_send
имеет такое поведение.
Как правило, вы должны проверить EINTR
и повторить вызов, если он не пройдет таким образом. Это особенно важно для системных вызовов, которые могут блокироваться как recv
или select
, так как они имеют более высокий шанс прерывания.