【问题标题】:libwebsockets: How to close connectionlibwebsockets:如何关闭连接
【发布时间】:2013-06-28 12:50:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: c websocket


    【解决方案1】:

    在之前版本的 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 指针,您就可以关闭其他连接。

    【讨论】:

    • 有没有办法判断远端的关闭是否干净?如果你只是从回调中返回一个 -1,它会关闭另一端,但是没有办法区分网络连接断开和 I-intended-to-cleanly-close,是吗?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多