Mam serwer, który wysyła dane do klienta co 5 sekund. Chcę, aby klient blokował podczas odczytu(), dopóki serwer nie wyśle niektórych danych, a następnie wydrukuje. Wiem, że read() jest domyślnie blokowany. Mój problem polega na tym, że mój klient nie blokuje odczytu(). Jest to bardzo dziwne i nie wydaje się to normalnym problemem.read() nie blokuje w programowaniu gniazd
Mój kod drukuje "Nic nie wróciło" w nieskończonej pętli. Jestem na maszynie Linux, programowanie w c. Mój fragment kodu znajduje się poniżej. Proszę o poradę.
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;
Czy sprawdziłeś, czy połączenie jest otwarte (np. "Sockfd" jest ważne)? –
Zwracana wartość 0 z 'read()' oznacza, że drugi koniec (serwer) zamknął gniazdo. –
@Ed Heal: Tak, jest poprawna. Mam czek na to. – Mathew