websocket server: closed connection threads are joined properly

This commit is contained in:
Benjamin Sergeant
2019-04-17 16:23:24 -07:00
parent bdfc55b951
commit d486c72e02
5 changed files with 61 additions and 12 deletions

View File

@ -12,7 +12,7 @@
#include <string>
#include <set>
#include <thread>
#include <vector>
#include <list>
#include <mutex>
#include <functional>
#include <memory>
@ -25,6 +25,10 @@ namespace ix
public:
using ConnectionStateFactory = std::function<std::shared_ptr<ConnectionState>()>;
// We use a list as we only care about remove and append operations.
using ConnectionThreads = std::list<std::pair<std::shared_ptr<ConnectionState>,
std::thread>>;
SocketServer(int port = SocketServer::kDefaultPort,
const std::string& host = SocketServer::kDefaultHost,
int backlog = SocketServer::kDefaultTcpBacklog,
@ -64,7 +68,7 @@ namespace ix
std::atomic<bool> _stop;
std::thread _thread;
std::vector<std::thread> _connectionsThreads;
ConnectionThreads _connectionsThreads;
std::condition_variable _conditionVariable;
std::mutex _conditionVariableMutex;
@ -77,5 +81,7 @@ namespace ix
virtual void handleConnection(int fd,
std::shared_ptr<ConnectionState> connectionState) = 0;
virtual size_t getConnectedClientsCount() = 0;
void closeTerminatedThreads();
};
}