Подтвердить что ты не робот

Может ли функция read() подключенного сокета возвращать нулевые байты?

Я знаю, что read() является блокирующим вызовом, если я не делаю сокет неблокирующим. Поэтому я ожидаю, что вызов read() запросит 4K данных, чтобы вернуть положительное значение (нет байтов) или -1 при ошибке (возможное соединение reset с клиентом и т.д.). Мой вопрос: Может ли() возвращать '0' по любому поводу?

Я обрабатываю read() следующим образом:

   if ((readval = read(acceptfd, buf, sizeof(buf) - 1)) < 0)
    {

    }
    else
    {
       buf[readval] = 0;
       //Do some thing with data  
    }

Этот код бомбит, если read() возвращает ноль, и я знаю, как его исправить. Но возможно ли read() вернуть ноль?

4b9b3361

Ответ 1

Когда TCP-соединение закрывается с одной стороны, read() с другой стороны возвращает 0 байт.