5

我正在使用libwebsockets来运行 websocket 服务器和客户端(实际上在同一个可执行文件中)。有没有办法优雅地关闭连接?

我知道我可以在回调函数中返回一个负整数来使连接中止,但这感觉更像是发生错误时发生的事情。在一些随机博客上的一些示例代码中,我发现了一个对函数的引用,libwebsocket_close_and_free_session但在库代码中不存在(不再存在?)。

理想情况下,我希望能够从回调处理程序中关闭与被调用的连接不同的连接(即解释像“关闭另一个连接”这样的命令)。

4

2 回答 2

5

在以前版本的 libwebsockets 中,公共 API 具有该libwebsocket_close_and_free_session功能。

之前的测试代码使用它来关闭连接,例如

if (mirror_lifetime == 0) {
    fprintf(stderr, "closing mirror session\n");
    libwebsocket_close_and_free_session(context,
        wsi_mirror, LWS_CLOSE_STATUS_GOINGAWAY);

但是新的测试代码使用 return -1 方法,所以我认为这是预期的优雅方法

mirror_lifetime--;
if (!mirror_lifetime) {
    fprintf(stderr, "closing mirror session\n");
    return -1;
}

该函数仍然存在于库代码中,但它现在位于private-libwebsocket.h文件中。我不确定您是否可以在代码中从那里访问它(或应该访问它)。如果可以的话,这对您来说将是完美的 API,因为只要您有struct libwebsocket *wsi指针,您就可以关闭其他连接。

于 2013-08-01T08:57:04.540 回答
0

我想您正在寻找一个函数lws_set_timeout(wsi, reason, timeout)

超时也可以是 LWS_TO_KILL_SYNC 以立即关闭会话。

于 2022-02-03T22:44:14.430 回答