You are not logged in.
You only get EINTR when your call was interrupted by a signal and your
signal handler was called, so if you wantto know what signal caused it let
the dignal handler store it in a global variable or something.
If you get EINTR and no signal handler was called then you're probably
running an older Linux and your process was stopped and continued again
with SIGSTOP and SIGCONT.
Just call msgrcv(2) again after it returns EINTR, that should work fine.