diff options
Diffstat (limited to 'src/Net/Listener.cpp')
-rw-r--r-- | src/Net/Listener.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/Net/Listener.cpp b/src/Net/Listener.cpp index 3fb2415..8386389 100644 --- a/src/Net/Listener.cpp +++ b/src/Net/Listener.cpp @@ -67,13 +67,32 @@ Listener::Listener(const IPAddress &address0) throw(ConnectionException) } Listener::~Listener() { + for(std::list<ServerConnection*>::iterator con = connections.begin(); con != connections.end(); ++con) { + (*con)->disconnect(); + delete *con; + } + shutdown(sock, SHUT_RDWR); close(sock); gnutls_dh_params_deinit(dh_params); } +std::vector<struct pollfd> Listener::getPollfds() const { + std::vector<struct pollfd> pollfds; + + struct pollfd fd = {sock, POLLIN, 0}; + pollfds.push_back(fd); + + for(std::list<ServerConnection*>::const_iterator con = connections.begin(); con != connections.end(); ++con) + pollfds.push_back((*con)->getPollfd()); + + return pollfds; +} + ServerConnection* Listener::getConnection() { + // TODO: Logging + int sd; struct sockaddr_in sa; socklen_t addrlen = sizeof(sa); |