Я пытаюсь написать код на C, в котором я хочу прочитать данные из сокета, но я не знаю длины входящих данных. Я не контролирую отправителя данных.
Есть ли способ чтения чтения сокетов с неизвестной длиной?
Ниже приведен код, который я написал, но он висит в 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 <= 0 || n == -1 )
break;
buffer = ( char * ) realloc ( buffer, n + SIZE_TO_READ );
}
char * p = strchr ( buffer, '\n' );
if ( p ) *p = '\0';
fprintf ( stderr, "-----> %s\n", buffer );
if ( buffer ) free ( buffer );
}
fd в этом случае - FILENO_STDIN