0

私は MsgSendv を使用しており、サーバーは次のように MSgReply を送信します。

char     desc_buf_out[MAX_CHARS_IN_A_LINE];
MsgReply(rcvid, EOK, desc_buf_out, sizeof(desc_buf_out));

私のクライアントは次のようになっています。

    iov_t              *iovrcv=calloc(1,sizeof(iov_t));
    char               rcv[1024]={0}
if (MsgSendv(server_coid, iovin_render, 3 , iovrcv, 1 ) == -1)
    {
        printf("error sending message to server\n");
        fprintf( stderr,
                 "%s: %s\n",
                 __func__,
                 strerror( errno ) );
        return EXIT_FAILURE;
    }

    SETIOV (iovrcv + 0, rcv, sizeof(rcv));
    printf("iovrcv=%s\n", rcv);

しかし、rcv バッファーには何も表示されませんか? データを正しく受信するための正しい方法とその理由を教えてください。文字列を受け取ることを期待しています。

4

1 に答える 1

0

初期化されていない iovrcv を使用しています (まあ、calloc を介してゼロで初期化されていますが、何かを指すように初期化されていません)。

iov_t は、ポインターと長さの値のペアです。

これは MsgSendv() 関数に渡され、データの送信先を伝えます。初期化されていないままにしておくと、MsgSendv() にポインターがゼロで長さがゼロであることを伝えます。大量のデータではありません。:-)

SETIOV を MsgSendv() 関数の上に移動します。

また、必ず iovin_render を初期化してください (3 つの部分、つまり、ptr/length 値の 3 つのペアがあることを示しています)。

于 2015-05-27T23:52:39.477 に答える