Я думаю, вы можете упустить какую-то логику там.Если вы получите сообщение об ошибке, возвращающее -1, но errno
равно , а не EAGAIN
, вы, вероятно, предполагаете, что оно сработало, а переменная oInfo
содержит действительные данные.
Это может привести кпроблема, если ваш процесс прерывается во время ожидания, так как один из действительных кодов возврата равен EINTR
.
В этом случае oInfo
будет содержать любой мусор, который был включенстек, когда вы входили в эту функцию, что подтверждается тем фактом, что я вполне уверен, что сигналы не доходят до 4714397: -)
Простой способ выяснить: распечатать iRet
и errno
в вашем случае по умолчанию.
В вашей строке также есть что-то ужасно неправильное:
printf( "Caught unexpected signal %d, error %d, code %d\n",
oInfo.si_signo, oInfo.si_errno,oInfo.si_code),oInfo.si_code) ;
но я собираюсь предположить, что это просто опечатка с вашей стороны, и это действительно что-то вроде:
printf ("Caught unexpected signal %d, error %d, code %d\n",
oInfo.si_signo, oInfo.si_errno, oInfo.si_code);
Изменение, которое я бы сделал, было бы:
printf ("Caught unexpected signal %d, error %d, code %d, errno %d, iret %d\n",
oInfo.si_signo, oInfo.si_errno, oInfo.si_code, errno, iRet);