MsgError(), MsgError_r()

Unblock a client and set its errno


#include <sys/neutrino.h>

int MsgError( int rcvid,
              int error );

int MsgError_r( int rcvid,
                int error );


The receive ID that MsgReceive*() returned.
The error code that you want to set for the client.



Use the -l c option to qcc to link against this library. This library is usually included automatically.


The MsgError() and MsgError_r() kernel calls unblock the client's MsgSend*() call and set the client's errno to error. No data is transferred.

If error is EOK, the MsgSend*() call returns EOK; if error is any other value, the MsgSend*() call returns -1.

These functions are identical except in the way they indicate errors. See the Returns section for details.

Note: An error number of ERESTART causes the sender to immediately call MsgSend*() again. Since send and reply buffers passed to MsgSend() may overlap, you shouldn't use ERESTART after a call to MsgWrite().

Blocking states

None. In the network case, lower priority threads may run.

Native networking

MsgError() has increased latency when you use it to communicate across a network — the server is now writing the error code to its local, which may need to communicate with the client's to actually transfer the error code.


The only difference between these functions is the way they indicate errors:

If an error occurs, the function returns -1 and sets errno. Any other value returned indicates success.
Returns EOK on success. This function does NOT set errno. If an error occurs, the function returns one of the values listed in the Errors section.


The thread indicated by rcvid doesn't exist.


QNX Neutrino

Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

ChannelCreate(), MsgReceive(), MsgReceivev(), MsgReply(), MsgReplyv(), MsgSend(), MsgSendnc(), MsgSendsv(), MsgSendsvnc(), MsgSendv(), MsgSendvnc(), MsgSendvs(), MsgSendvsnc()

Message Passing chapter of Getting Started with QNX Neutrino