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

ut6juiuv  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(159)

我在libuv中初始化一个循环,但是如果我需要在初始化循环之后调用uv_run之前返回,我如何正确地清理所有内存和文件描述符?下面是我的示例代码,loopuv_loop_t*serveruv_tcp_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);

根据this question,我应该停止,行走和运行循环,关闭所有的手柄;但那是假设我已经在运行这个循环了,实际上我没有,我可以直接调用uv_loop_close(loop),但这不能释放句柄。

qpgpyjmq

qpgpyjmq1#

正如链接中提到的,您需要做类似这样的事情;

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);
                  },
        NULL);

相关问题