Tengo un servidor que envía datos a un cliente cada 5 segundos. Quiero que el cliente bloquee en read() hasta que el servidor envíe algunos datos y luego los imprima. Sé que read() está bloqueando por defecto. Mi problema es que mi cliente no está bloqueando en read(). Esto es muy extraño y esto no parece ser un problema normal.read() no está bloqueando en la programación de socket
Mi código imprime "Nada regresó" en un ciclo infinito. Estoy en una máquina Linux, programando en c. Mi fragmento de código está a continuación. Por favor aconséjame.
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;
¿Ha comprobado que la conexión está abierta (es decir, 'sockfd' es válido)? –
Un valor de retorno de 0 desde 'leer()' significa que el otro extremo (el servidor) cerró el socket. –
@Ed Heal: Sí, es válido. Tengo un cheque por eso. – Mathew