Ошибка libuv - неинициализированный поток - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь использовать libuv для отправки некоторых данных.Клиент подключается к серверу, сервер принимает соединение, затем клиент пытается записать, используя uv_write (вывод printf, так что я знаю, что это далеко).В результате получается

 uv_write2: Assertion `(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || stream->type == UV_TTY) && "uv_write (unix) does not yet support other types of streams"' failed.

Что заставляет меня думать, что поток не должен быть инициализирован.Код ниже, что я делаю не так?

void OnConnectToServer(uv_connect_t *client, int status) 
{
    if (status < 0) 
    {
        return;
    }

    printf( "Client attempt write\n" );

    write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t));
    req->buf = uv_buf_init( (char*) malloc(1), 1 );     
    (req->buf.base)[0] = '0';
    uv_write((uv_write_t*) req, client->handle, &req->buf, 1, OnWrite); 
}

void SendData( uv_async_t*sd )
{
    uv_tcp_t client;
    uv_tcp_init(loop, &client);
    uv_connect_t* connect = (uv_connect_t*)malloc(sizeof(uv_connect_t));
    struct sockaddr_in dest;
    uv_ip4_addr("192.168.20.3", PORT, &dest);
    uv_tcp_connect(connect, &client, (const struct sockaddr*)&dest, OnConnectToServer);
}

1 Ответ

0 голосов
/ 11 июля 2018

uv_write_t - правильная структура, но вы не можете использовать req->buf, которая является частным полем.Вы должны объявить новую переменную следующим образом:

uv_write_t *req = (uv_write_t*) malloc(sizeof(uv_write_t));
uv_buf_t buf = uv_buf_init( (char*) malloc(1), 1 );
buf.base[0] = '0';
uv_write(req, client->handle, &buf, 1, OnWrite); 
...