read() nicht blockiert, die in socket-Programmierung

Ich habe einen server, sendet Daten an einen client alle 5 Sekunden. Ich möchte die client-zu-block-read (), bis der server sendet einige Daten und dann drucken. Ich weiß, read () blockiert standardmäßig. Mein problem ist, dass mein client nicht blockiert read(). Dies ist sehr sonderbar und scheint dies nicht zu sein ein normales Problem.

Mein code druckt "es kam Nichts zurück ..." in einer Endlosschleife. Ich bin auf einer linux-Maschine, in c Programmieren. Mein code-snippet unten. Bitte um Rat.

while(1)
{
    n = read(sockfd, recvline, MAXLINE);
    if ( n > 0) 
    {
        recvline[n] = 0;    
        if (fputs(recvline, stdout) == EOF)
            printf("fputs error");
    }
    else if(n == 0)
        printf("Nothing came back");
    else if (n < 0)
        printf("read error");
}
return; 
  • Haben Sie überprüft, dass die Verbindung offen ist (ich.e sockfd gültig ist)?
  • Ein Rückgabewert von 0 aus read() bedeutet, dass das andere Ende (der server) der socket geschlossen.
  • Heilen : ja, es ist gültig. Ich habe einen check für die.
  • Naja, die Sache ist die, dass der server sendet die Daten alle 5 Sekunden. Es sei denn, wartet der client für den server zu senden, wird es 0 und das jedes mal.
  • Nein ist es nicht. Null bedeutet, dass der peer die Verbindung geschlossen. Es bedeutet niemals gab es keine Daten. Im blockierenden Modus read() blockiert; im non-blocking-Modus, wenn es keine Daten, es wird -1 zurück mit errno gesetzt, um EAGAIN oder EWOULDBLOCK je in Ihre Plattform.
InformationsquelleAutor Mathew | 2012-10-07
Schreibe einen Kommentar