Я прочитал пример tcp-echo-server.c из libuv, сейчас я пишу небольшой многопоточный tcp-сервер на его основе.
Я использовал uv_default_loop
в основномпоток, чтобы принимать соединения, и поместить новое соединение в список.
// main thread
uv_ip4_addr("0.0.0.0", DEFAULT_PORT, &addr);
uv_tcp_bind(&server, (const struct sockaddr*)&addr, 0);
int r = uv_listen((uv_stream_t*) &server, DEFAULT_BACKLOG, OnConnectionCallback);
if (r)
{
ERROR("Listen error %s", uv_strerror(r));
return;
}
uv_run(loop, UV_RUN_DEFAULT);
, а во втором потоке я передаю сообщение всем имеющимся соединениям.
// second thread
write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t));
req->buf = uv_buf_init((char *)buffer->data(), buffer->size());
int r = uv_write((uv_write_t*) req, (uv_stream_t *)this->uv, &req->buf, 1, write_callback);
if (r)
{
ERROR("uv_write error: %s", uv_strerror(ret));
}
принимаюсоединение работает, чтение с клиента работает, но пишущая часть не работает.код ошибки не сообщается, но его обратный вызов так и не сработал.
Я просмотрел документ, но пока не смог найти никакой подсказки.Что я пропустил?
кстати, я использую std::thread
, а не нить api из libuv.