web-dev-qa-db-fra.com

La fonction read () sur une socket connectée peut-elle renvoyer zéro octet?

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?

28
kumar

Lorsqu'une connexion TCP est fermée d'un côté, read () de l'autre retourne 0 octet.

49
Sergei Kurenkov