From e1969fe524a8335b8664914748d6b4208385fdf7 Mon Sep 17 00:00:00 2001 From: Maxime Graulich <maxime.graulich@gmail.com> Date: Mon, 15 Dec 2014 17:01:44 +0000 Subject: [PATCH] ONELAB2: Avoid SIGPIPE when client does not wait to close --- contrib/onelab2/OnelabServer.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/contrib/onelab2/OnelabServer.cpp b/contrib/onelab2/OnelabServer.cpp index 669de1d870..b057dee1c3 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()) { -- GitLab