Запрос о контрейлерных FIN и получить

Будет ли этот код работать, если получен FIN с привязкой?

while(1) {

    rc = recv(sock,buf,sizeof(buf),MSG_WAITALL);

    if (rc > 0)
    {
        /* Code to process recv buf */
    }
    else if (rc == 0)
    {
        /* received FIN ?? */
        close(sock);
        break;
    }
    else /* rc < 0 */
    {
        /* Handle error */
        break;
    }
}

Хотелось бы знать, сработает ли это или нет, и какие альтернативные предложения у вас могут быть.

1 ответ

Решение

Если есть данные, rc будет положительным, и ваш первый if блок выполнится. Если в следующий раз ничего не останется, кроме FIN, rc будет ноль, и ваш второй блок будет выполняться.

Другие вопросы по тегам