C 在初始化期间正确关闭Libuv循环

C 在初始化期间正确关闭Libuv循环,c,libuv,resource-cleanup,C,Libuv,Resource Cleanup,我正在初始化libuv中的一个循环,但是如果我需要在初始化循环之后但在调用uv\u run之前返回,我如何正确地清理所有内存和文件描述符?下面是我的示例代码,loop是uv\u loop\u t*和server是uv\u t*: if (uv_loop_init(loop) < 0) { return -1; } if (uv_tcp_init(loop, server) < 0) { // What code here? return -1; } if (s

我正在初始化libuv中的一个循环,但是如果我需要在初始化循环之后但在调用
uv\u run
之前返回,我如何正确地清理所有内存和文件描述符?下面是我的示例代码,
loop
uv\u loop\u t*
server
uv\u t*

if (uv_loop_init(loop) < 0) {
    return -1;
}
if (uv_tcp_init(loop, server) < 0) {
    // What code here?
    return -1;
}
if (some_other_function() < 0) {
    // What code here?
    return -1;
}
uv_run(loop, UV_RUN_DEFAULT);
if(uv\u loop\u init(loop)<0){
返回-1;
}
if(uv_tcp_init(循环,服务器)<0){
//这里有什么代码?
返回-1;
}
if(some_other_函数()<0){
//这里有什么代码?
返回-1;
}
uv_运行(循环,uv_运行默认值);

根据我的经验,我应该停下来,走着,跑着,关上所有的把手;但这假设我已经在运行循环,而我没有。我可以直接调用
uv\u loop\u close(loop)
,但这并不能释放句柄。

正如您在链接中提到的,您需要这样做

uv_loop_init(&loop);
uv_tcp_init(&loop, &server);

uv_walk(
  &loop,
  [](uv_handle_t* handle, void* arg) {
    printf("closing...%p\n", handle);
    uv_close(handle, [](uv_handle_t* handle) {
      printf("closed...%p\n", handle);
    });
    uv_run(&loop, UV_RUN_ONCE);
  },
  nullptr);