Как закрыть C ++ REST Sdk веб-сокет? - PullRequest
0 голосов
/ 12 февраля 2019

Я использую 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 ();закрыть соединение и не дождаться рукопожатия с сервера?Или с кодом сервера при закрытии веб-сокета что-то не так?

1 Ответ

0 голосов
/ 13 февраля 2019

Это была моя собственная ошибка.Я установил _client.set_close_handler (...), которые используют lock_guard.Это создает тупик, поскольку этот мьютекс был заблокирован во время вызова close ().

...