Socket lu et données de longueur inconnue

J’essaie d’écrire du code en C, dans lequel je veux lire une donnée depuis un socket, mais je ne connais pas la longueur des données entrant. Je n’ai aucun contrôle sur l’expéditeur des données.

Existe-t-il un moyen de lire la lecture de socket en utilisant une longueur inconnue?

Ce qui suit est le code que j’ai écrit mais il se bloque dans read() .

 static void process_command ( int fd ) { fprintf ( stderr, "process_command\n" ); char *buffer = ( char * ) malloc ( sizeof ( char ) * SIZE_TO_READ ); int n = 0; while ( 1 ) { fprintf ( stderr, "." ); n = read ( fd, buffer, SIZE_TO_READ ); fprintf ( stderr, "bytes read = %d \n", n ); if ( n  %s\n", buffer ); if ( buffer ) free ( buffer ); } 

fd dans ce cas est FILENO_STDIN

Passez SOCK_NONBLOCK dans l’appel à socket() (ou appelez fcntl() avec O_NONBLOCK plus tard) pour rendre les opérations de socket non bloquantes. Cela entraînera l’échec de l’appel read() avec EAGAIN ou EWOULDBLOCK (ceux-ci sont effectivement les mêmes) s’il n’y a pas de données à lire (encore).

Vous pouvez également utiliser select() pour déterminer s’il existe des données prêtes à être lues sur un socket spécifique avant l’appel read() réel.

Il suffit de lire quelques blocs (tampons) jusqu’à ce qu’il retourne 0 ou vous verrez qu’il y a une fin des données selon le protocole.

Il est inhabituel de ne pas connaître le nombre d’octets à attendre. La plupart des protocoles ont certains moyens de spécifier la longueur des données ou le terminateur de données. Quel type de protocole implémentez-vous exactement?