diff --git a/contrib/onelab2/OnelabServer.cpp b/contrib/onelab2/OnelabServer.cpp index 669de1d8704810eb86c510754b7a479fb040df98..b057dee1c3a8dd0ed563855a0b1dd9a61c066da5 100644 --- a/contrib/onelab2/OnelabServer.cpp +++ b/contrib/onelab2/OnelabServer.cpp @@ -337,7 +337,14 @@ void *listenOnClients(void *param) std::cout << "\033[0;31m" << "Client \"" << cli->getName() << "\" is going to stop" << "\033[0m" << std::endl; // DEBUG rep.msgType(OnelabProtocol::OnelabStop); recvlen = rep.encodeMsg(buff, 1024); - cli->sendto(buff, recvlen); + fd_set writefds; + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 5000; + FD_ZERO(&writefds); + FD_SET(cli->getSSocket(), &writefds); + if(select(cli->getSSocket()+1, NULL, writefds, NULL, timeout) > 0) + cli->sendto(buff, recvlen); //UDT::epoll_remove_usock(eid, *it); UDT::epoll_remove_ssock(eid, *it); OnelabServer::instance()->removeClient(cli); @@ -413,16 +420,6 @@ void *listenOnClients(void *param) OnelabServer::instance()->getPtr((onelab::function **)¶meter, attr->getName(), cli->getName()); break; } - // TODO - //rep.msgType(OnelabProtocol::OnelabUpdate); - //rep.attrs.push_back(parameter); - //recvlen = rep.encodeMsg(buff, 1024); - //std::map<std::string, bool> clients = attr->getClients(); - //for(std::map<std::string, bool>::const_iterator it = clients.begin(); it != clients.end(); it++) { - // OnelabLocalNetworkClient *tmp = OnelabServer::instance()->getClient(it->first); - // if(tmp == NULL || cli == tmp) continue; - // tmp->sendto(buff, recvlen); - //} } else switch((*it)->getAttributeType()) {