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(); }