Сервер Boost.Beast WebSocket - «Ошибка чтения: операция ввода-вывода была прервана» при подключении клиентаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Сервер Boost.Beast WebSocket - «Ошибка чтения: операция ввода-вывода была прервана» при подключении клиента

Сообщение Anonymous »

Я создаю сервер WebSocket, используя Boost.Asio и Boost.Beast с SSL. Сервер принимает соединения, но я столкнулся с проблемой, когда клиент отключается вскоре после подключения. Я получаю сообщение об ошибке:

Код: Выделить всё

Read error: The I/O operation has been aborted because of either a thread exit or an application request (Code: 995)
Вот разбивка моей настройки:
  • Сервер использует async_accept для приема новых клиентских подключений, где каждое соединение заключено в экземпляр SslWebSocket.
  • A ConnectionManager отслеживает подключенных клиентов.
  • Я использую async_read для чтения входящих сообщений и их соответствующей маршрутизации.
  • Существует также механизм проверки связи для поддержания работоспособности соединений.
Сервер последовательно регистрирует следующие сообщения:
  • "Запуск сервера WebSocket..."
  • "Ожидание подключений..."
  • "Соединение принято".
  • "Попытка добавить клиента..."
  • "Клиент успешно добавлен".
  • После этого появляется упомянутая выше ошибка чтения.
Пример кода:
Вот отрывок из методов do_accept, start_read и main:< /p>

Код: Выделить всё

int main(int argc, char** argv) {
// Create io_context and SSL context
boost::asio::io_context io_context;
asio::ssl::context ssl_ctx(asio::ssl::context::sslv23);
ssl_ctx.set_verify_mode(asio::ssl::verify_none); // Disable SSL verification for testing

// Define the server endpoint (IP and port)
tcp::endpoint endpoint(tcp::v4(), 8080);
auto logger = std::make_shared(io_context, "server.log"); // Assuming you have a logger class

// Create the WebSocket server
auto server = std::make_shared(io_context, ssl_ctx, endpoint, logger);

// Start the server in a separate thread
std::thread server_thread([server]() {
server->start(); // Assuming you have a start method in WebSocketServer
});

// Run the io_context in the main thread
io_context.run();

// Optionally join the server thread if you want to wait for it
server_thread.join();

return 0; // Exit the program when the server is stopped (if ever)
}

void WebSocketServer::start() {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79147255/boost-beast-websocket-server-read-error-the-i-o-operation-has-been-aborted[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»