Je sais que read () est un appel bloquant à moins que je ne rende le socket non bloquant. Donc, je m'attends à ce que l'appel read () qui demande 4K de données renvoie une valeur positive (nombre d'octets lus) ou -1 en cas d'erreur (connexion possible réinitialisée par le client, etc.). Ma question est la suivante: read () peut-il retourner "0" à n'importe quelle occasion?
Je gère le read () de cette façon:
if ((readval = read(acceptfd, buf, sizeof(buf) - 1)) < 0)
{
}
else
{
buf[readval] = 0;
//Do some thing with data
}
Ce code bombe si read () renvoie zéro et je sais comment le réparer. Mais est-il possible que read () renvoie zéro?
Lorsqu'une connexion TCP est fermée d'un côté, read () de l'autre retourne 0 octet.