docs: def start(self):
          "Start the service"
          # register signals
          gevent.signal(signal.SIGINT, self._shutdown)
  
          # spawn the flush trigger
          def _flush_impl():
              while 1:
                  gevent.sleep(self._stats.interval)
  
                  # rotate stats
                  stats = self._stats
                  self._reset_stats()
  
                  # send the stats to the sink which in turn broadcasts
                  # the stats packet to one or more hosts.
                  try:
                      self._sink.send(stats)
                  except Exception, ex:
                      trace = traceback.format_tb(sys.exc_info()[-1])
                      self.error(''.join(trace))
  
          self._flush_task = gevent.spawn(_flush_impl)
  
          # start accepting connections
          self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
              socket.IPPROTO_UDP)
          self._sock.bind(self._bindaddr)
          while 1:
              try:
                  data, _ = self._sock.recvfrom(MAX_PACKET)
                  for p in data.split('\n'):
                      if p:
                          self._process(p)
              except Exception, ex:
                  self.error(str(ex))