Я знаю, что read () является блокирующим вызовом, если я не сделаю сокет неблокирующим. Поэтому я ожидаю, что вызов read (), который запрашивает 4K данных, должен возвращать положительное значение (без чтения байтов) или -1 при ошибке (возможный сброс соединения клиентом и т. Д.). Мой вопрос: может ли read () вернуть '0' в любом случае?
Я обрабатываю read () следующим образом:
if ((readval = read(acceptfd, buf, sizeof(buf) - 1)) < 0)
{
}
else
{
buf[readval] = 0;
//Do some thing with data
}
Этот код бомбы, если read () возвращает ноль, и я знаю, как это исправить. Но может ли read () вернуть ноль?