首页 > 解决方案 > 如何关闭 C++ REST Sdk websocket?

问题描述

我在客户端使用 cpprestsdk,在服务器端使用 .net core 2.1。除了结束部分,一切都有效。

// C++
web::websockets::client::websocket_callback_client _client;
//connecting and working with websocket...
_client.close().wait();

// C#
while (!Socket.CloseStatus.HasValue)
{
    //sending/reciving data
}
await Socket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "Connection closed", CancellationToken.None);

问题是 _client.close().wait(); 永远不会退出。服务器获取关闭请求并成功调用 CloseOutputAsync。而且我不知道为什么它永远不会退出_client.close().wait();。看起来 C++ 和 .net 核心实现之间的握手存在一些问题,并且没有设法解决。有什么方法可以强制 _client.close().wait(); 关闭连接并且不等待来自服务器的握手部分?还是关闭 Web 套接字的服务器代码有问题?

标签: c#c++cpprest-sdk

解决方案


这是我自己的错误。我已经设置了使用 lock_guard 的 _client.set_close_handler(...)。这会导致死锁,因为该互斥锁在 close() 调用期间被锁定。


推荐阅读