main: src/unix/core.c:117: uv_close: 断言 '!uv__is_closing(handle)' 失败
main: src/unix/core.c:117: uv_close: Assertion `!uv__is_closing(handle)' failed
当我尝试使用libuv
库中的 uv_close((uv_handle_t*)client,NULL)
时,用客户端积极关闭TCP连接时,错误
" main:src/unix/core.c:117:uv_close:断言`!uv__is_closing(handle)'失败。"
报道了。我在线搜索很多,但我仍然找不到解决问题的正确方法。我希望有人能告诉我为什么会导致这个问题以及如何解决。
您正在尝试关闭一个已经关闭或处于闭合状态的手柄(也就是说,在将手柄从活着到关闭的过程中的某个地方)。
从libuv
的代码中可以看到,uv_close
函数开始为:
void uv_close(uv_handle_t* handle, uv_close_cb close_cb) {
assert(!uv__is_closing(handle));
handle->flags |= UV_CLOSING;
// ...
其中uv__is_closing
定义为:
#define uv__is_closing(h)
(((h)->flags & (UV_CLOSING | UV_CLOSED)) != 0)
总结一下,一旦在手柄上调用uv_close
,就会设置UV_CLOSING
标志,并在随后的调用中进行检查,以避免关闭功能的多次运行。换句话说,您只能 close 一个手柄一次。
出现错误,因为您可能会多次调用uv_close
来处理句柄。但是,很难不查看真实代码。
作为旁注,如果有疑问,可以使用uv_is_closing
测试手柄。这是uv__is_closing
的一种别名。
相关文章:
- Why is UINT32_MAX + 1 = 0?
- C++错误:"error: int aaa::bbb is protected within this context"
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- Is !NaN not a NaN?
- Directx 11 - CompileFromFile() is not compiling
- Centos7 g++ "to_string is not in a member of std"
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- Where is std::hardware_destructive_interference_size?
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- What is unordered_set in C++
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- C++ "error: use of overloaded operator '*' is ambiguous"似乎只有一场比赛
- C++ is calculating wrong
- Is it good to use SDL_PIXELFORMAT_UNKNOWN?
- reference_wrapper导致"incomplete type is not allowed"
- 为什么即使在定义之后仍存在"Identifier is undefined error "?
- 结构中的错误"Incomplete type is not allowed"
- Crash in boost::archive::text_iarchive in_archive {is} boost
- 在反转字符串'my.name.is'时,我得到的输出为"is@.name.my"。我不明白'@'是从哪里来的