我正在尝试用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

最佳答案

在调用中将SOCK_NONBLOCK传递给socket()(或稍后使用fcntl()调用O_NONBLOCK)以使套接字操作无阻塞。如果还没有要读取的数据,这将导致read()调用失败,并带有EAGAIN或EWOULDBLOCK(实际上是相同的)。

或者,您可以使用select()来确定在实际read()调用之前是否已准备好在特定套接字上读取任何数据。

关于c - 套接字读取和未知长度数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4769830/

10-14 15:58
查看更多