And*_*doi 10 c nonblocking exit libuv
我有一个使用libuv库的应用程序.它运行默认循环:
uv_run(uv_default_loop());
Run Code Online (Sandbox Code Playgroud)
如果发生故障,如何正常退出应用程序?目前我正在这样做,如下例所示:
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);
}
Run Code Online (Sandbox Code Playgroud)
应该uv_loop_delete调用函数吗?它有什么作用?它是否会丢弃所有待处理的回调函数?它是否关闭所有当前打开的TCP连接?退出前我是否必须手动完成?
PS:无法添加标签'libuv'(声誉低于1500).有人可以创建并添加它吗?
uv_loop_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
}
Run Code Online (Sandbox Code Playgroud)
它将有效地清理所有可以清理的文件描述符。它将关闭TCP连接、Inotify连接、用于读取事件的Socket、Pipe fds等。
=> 是的,此函数将关闭您通过 libuv 打开的所有内容。
注意:无论如何,当您的应用程序退出时,您的操作系统将毫不留情地清理并关闭您打开的所有内容。