Здравствуйте, Marty, Вы писали:
M>Не. Должна вернуть ошибку, а errno будет EINTR
Как-то так, но EINTR это даже не ошибка, а призыв повторить системный вызов, потому что он был прерван по какой-либо причине:
Many system calls will report the EINTR error code if a signal occurred while the system call was in progress. No error actually occurred, it's just reported that way because the system isn't able to resume the system call automatically.
здесь
В случае Unix, одной из причин может стать сигнал. Но я видел достаточно встраиваемых сетевых стеков, там где никаких сигналов даже нет, но поведение операции чтения из TCP сокета такое же, естественно без EINTR, а просто 0 в результате. Следующие попытки чтения успешны, сокет не разрывается, просто вот в силу причин иногда проскакивает 0. Windows — то же самое.