diff --git a/src/ServiceDiscovery/ServiceDiscovery.cpp b/src/ServiceDiscovery/ServiceDiscovery.cpp index 474f803..23c8b8c 100644 --- a/src/ServiceDiscovery/ServiceDiscovery.cpp +++ b/src/ServiceDiscovery/ServiceDiscovery.cpp @@ -157,7 +157,13 @@ void* ServiceDiscovery::MulticastPublishThread(void* arg){ while(running){ - zmq::poll(&items [0], 2, 1000); + try{ + zmq::poll(&items [0], 2, 1000); + } catch(zmq::error_t& err){ + // ignore poll aborting due to signals + if(zmq_errno()==EINTR) continue; + throw; + } if ((items [0].revents & ZMQ_POLLIN) && running) { @@ -292,15 +298,27 @@ void* ServiceDiscovery::MulticastPublishThread(void* arg){ zmq::message_t Esend(command.length()+1); snprintf ((char *) Esend.data(), command.length()+1 , "%s" ,command.c_str()) ; - - zmq::poll(out,1,1000); - + + try{ + zmq::poll(out,1,1000); + } catch(zmq::error_t& err){ + // ignore poll aborting due to signals + if(zmq_errno()==EINTR) continue; + throw; + } + if(out[0].revents & ZMQ_POLLOUT){ StatusCheck.send(Esend); - //std::cout<<"waiting for message "<second)>>service; zmq::message_t send(service.length()+1); snprintf ((char *) send.data(), service.length()+1 , "%s" ,service.c_str()) ; - - zmq::poll(out,1,1000); + + try{ + zmq::poll(out,1,1000); + } catch(zmq::error_t& err){ + // ignore poll aborting due to signals + if(zmq_errno()==EINTR) continue; + throw; + } + if(out[0].revents & ZMQ_POLLOUT) Ireceive.send(send); } @@ -736,8 +767,14 @@ void* ServiceDiscovery::MulticastListenThread(void* arg){ *(it->second)>>service; zmq::message_t send(service.length()+1); snprintf ((char *) send.data(), service.length()+1 , "%s" ,service.c_str()) ; - - zmq::poll(out,1,1000); + + try{ + zmq::poll(out,1,1000); + } catch(zmq::error_t& err){ + // ignore poll aborting due to signals + if(zmq_errno()==EINTR) continue; + throw; + } if(out[0].revents & ZMQ_POLLOUT) Ireceive.send(send); }