For example, if it failed to invoke msgsnd/msgrcv:
- How to handle the errno – what is the best way?
- What principle is applying to business product?
- Shall I have to cover all of them?
- What kinds of error must be handled? Do I have to write a signal handler for EINTR or something like this?
Here’s my straw-man code:
RetVal = msgrcv(... );
if( RetVal == -1 )
{
switch (errno)
{
case E2BIG:
...
case EAGAIN:
...
case EFAULT:
...
case EIDRM:
...
case EINTR:
...
case EINVAL:
...
case ENOMEM:
...
default:
...
}
This depends on the coding standards you want to apply, and how you might reasonably respond to the failures.
You should always check errors, but you might commonly only handle one or two of them such as EINTR. I would at least try to print some kind of diagnostic last-gasp message before violently exiting in the case of unexpected errors.
The more critical the software, the more carefuly-designed it needs to be, and more comprehensive error handling is part of that.
Since your tags are “C” and “Linux” I assume you’re using GCC, in which case have a look at the handy %m in printf.