我正在使用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/