From 6f418f3c8f6f517c0815e6d4a01d6b9a29044a39 Mon Sep 17 00:00:00 2001 From: uvos Date: Sat, 2 Oct 2021 19:09:14 +0200 Subject: [PATCH] i am an idiot --- main.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/main.cpp b/main.cpp index d72bc84..d73431e 100644 --- a/main.cpp +++ b/main.cpp @@ -106,10 +106,10 @@ void acceptThreadFunction( TCPServerSocket* servSock, std::vectorpush_back(ClientHandler(newSock)); // Wait for a client to connect struct epoll_event ev; ev.events = EPOLLIN; - ev.data.fd = clients->size()-1; + ev.data.fd = newSock->getFD(); clientsMutex->unlock(); epoll_ctl(pollQue, EPOLL_CTL_ADD, newSock->getFD(), &ev); - char welcomeMesg[] = "UVOS serial multiplexer " VERSION "\n"; + char welcomeMesg[] = "UVOS serial multiplexer " VERSION "\n"; clients->back().write(welcomeMesg, sizeof(welcomeMesg)-1); std::cout<<"got client\n"; } @@ -205,21 +205,19 @@ int main(int argc, char* argv[]) { if(ev.data.fd != -1) { - clientsMutex.lock(); - int i = ev.data.fd; - if(abs(i) >= clients.size()) - { - clientsMutex.unlock(); + std::vector::iterator client = + std::find(clients.begin(), clients.end(), ev.data.fd); + if(client == clients.end()) continue; - } + clientsMutex.lock(); std::cout<<"client poll\n"; if(ev.events & EPOLLIN) - clients[i].run(&clients, serial, config.verbose); - if((ev.events & (EPOLLHUP | EPOLLERR)) || clients[i].isDisconnected()) + client->run(&clients, serial, config.verbose); + if((ev.events & (EPOLLHUP | EPOLLERR)) || client->isDisconnected()) { - clients[i].cleanUp(); - clients.erase(clients.begin()+i); - std::cout<<"client "<cleanUp(); + clients.erase(client); + std::cout<<"client disconnected\n"; } clientsMutex.unlock(); }