La página del manual función de biblioteca recv()
mencionan que:caso cuando el bloqueo de recv() devuelve menos de bytes solicitado
Devuelve el número de bytes recibidos. Por lo general, devuelve todos los datos disponibles, hasta la cantidad solicitada, en lugar de esperar el recibo de la cantidad total solicitada.
Si estamos usando el bloqueo de recv()
llamada y solicitado para 100 bytes:
recv(sockDesc, buffer, size, 0); /* Where size is 100. */
y sólo 50 bytes son enviados por el servidor entonces este recv()
se bloquea hasta 100 bytes están disponibles, o devolverá recibir 50 bytes.
El escenario podría ser que:
servidor se bloquea después de sendign sólo 50 bytes
mal diseño del protocolo, donde servidor sólo envía 50 bytes mientras el cliente está esperando 100 y servidor también está esperando la respuesta del cliente (es decir, la conexión de conexión de socket no ha sido iniciada por el servidor en el que volverá recv)
Me interesa Li plataforma nux/Solaris. No tengo el entorno de desarrollo para verificarlo yo mismo.
Gracias por la explicación detallada. ¿Confirmando si esto también es válido para la llamada * blocking * recv()? (es decir, retorno de recv() con bytes inferiores a los solicitados) – Adil
Sí, esto es cierto para una llamada de bloqueo de recepción. – nos