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

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

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

最佳答案

在libwebsockets的早期版本中,公共(public)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指针,您就可以关闭其他连接。

关于c - libwebsockets : How to close connection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17403806/

10-11 22:58