套接字读取和未知长度数据

Avi*_*ash 2 c unix sockets

我正在尝试用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 );
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,fd是FILENO_STDIN

Ela*_*fer 5

只需读取一些块(缓冲区),直到它返回0,否则您将看到根据协议存在数据结束.