C libuv:如何在出现错误时优雅地退出应用程序?
我有一个使用libuv库的应用程序。它运行默认循环:C libuv:如何在出现错误时优雅地退出应用程序?,c,exit,nonblocking,libuv,C,Exit,Nonblocking,Libuv,我有一个使用libuv库的应用程序。它运行默认循环: uv_run(uv_default_loop()); 如果出现故障,应用程序如何正常退出?目前,我正在执行以下示例中的操作: uv_tcp_t* tcp = malloc(sizeof(uv_tcp_t)); int r = uv_tcp_init(uv_default_loop(), tcp); if (r) { free(tcp); uv_loop_delete(default_loop); exit(EXIT_FAILU
uv_run(uv_default_loop());
如果出现故障,应用程序如何正常退出?目前,我正在执行以下示例中的操作:
uv_tcp_t* tcp = malloc(sizeof(uv_tcp_t));
int r = uv_tcp_init(uv_default_loop(), tcp);
if (r) {
free(tcp);
uv_loop_delete(default_loop);
exit(EXIT_FAILURE);
}
是否应调用uv\u loop\u delete
函数?它有什么作用?它是否删除所有挂起的回调函数?它是否关闭所有当前打开的TCP连接?我必须在退出前手动完成吗
注意:无法添加标签“libuv”(低于1500)。有人可以创建并添加它吗?uv\u loop\u delete的声明是,源代码是。看起来是这样的:
void uv_loop_delete(uv_loop_t* loop) {
uv_ares_destroy(loop, loop->channel);
ev_loop_destroy(loop->ev);
#if __linux__
if (loop->inotify_fd == -1) return;
ev_io_stop(loop->ev, &loop->inotify_read_watcher);
close(loop->inotify_fd);
loop->inotify_fd = -1;
#endif
#if HAVE_PORTS_FS
if (loop->fs_fd != -1)
close(loop->fs_fd);
#endif
}
它将有效地清理所有可能清理的文件描述符。它将关闭TCP连接、Inotify连接、用于读取事件的套接字、管道FD等
=>是,此函数将关闭通过libuv打开的所有内容
注意:不管怎样,当你的应用程序退出时,你的操作系统会清理并关闭你打开的所有东西,不会有任何怜悯 请编辑libuv的描述,我不是100%确定libuv的意思。谢谢!编辑。你能看一下吗?这里看不到可能是因为我保存描述时stackoverflow崩溃了。现在它没有显示编辑wiki的链接。下面是我添加的摘录和说明:摘录:“node.js的平台层”说明:“libuv是node.js的平台层。它的目的是在Windows和Unix系统上抽象IOCP。它最终将包含此库中的所有平台差异。[github上的libuv][1][1]啊,我也没有标签代表来编辑标签描述,我只能创建标签。听起来合乎逻辑。操作系统应该释放所有资源。谢谢Corendo这个答案仍然适用于1.x版和更高版本?@dave yes。uv_loop_delete现在调用uv_loop_close,在1.x版中,它是关闭所有内容的主要入口点。