Завершение работы сервера WebSocket++, но порт по-прежнему используется

В настоящее время я завершаю работу над своим сервером, закрывая (или обновляя) вкладку браузера клиента. Когда на сервере вызывается функция закрытия WebSocket, сервер прекращает прослушивание, закрывает все соединения и т. Д. И завершает работу. Вот код:

void onClose(server* s, websocketpp::connection_hdl hdl) {
    bool running = false;
    s->stop_listening ();
    for (vector<Player *>::iterator it = players.begin(); it != players.end(); ++it) {
        Player *p = *it;
        s->pause_reading(p->io);
        s->close(p->io, websocketpp::close::status::normal, "");
    }
    s->stop ();
    exit (0);
}

В приведенном выше фрагменте я перебираю всех "игроков" (подключенных клиентов). Использование p->io относится к websocketpp::connection_hdl,

Однако, когда я снова запускаю сервер, я получаю эту ошибку:

[info] asio listen error: system:98 (Address already in use)

Мне нужно подождать несколько минут, прежде чем я смогу снова использовать сервер. Это и раздражает, и потенциально опасно в производстве.

Есть идеи, что может происходить?

1 ответ

Решение

Делай, как сказал Давид, чтобы ты знал, что делаешь. Затем используйте функцию websocketspp s->set_reuse_addr(true)

Другие вопросы по тегам