in ptp/simpleclient/client.go [495:533]
func (c *Client) runInternal(skipSetup bool) error {
ctx, cancel := context.WithTimeout(context.Background(), c.cfg.Timeout)
defer cancel()
eg, ctx := errgroup.WithContext(ctx)
if !skipSetup {
if err := c.setup(ctx, eg); err != nil {
return err
}
}
eg.Go(func() error {
for {
select {
case <-ctx.Done():
log.Debugf("cancelled main loop")
return ctx.Err()
case msg := <-c.inChan:
if err := c.handleMsg(msg); err != nil {
return err
}
default:
switch c.state {
case stateInit:
seq, err := c.sendGeneralMsg(reqUnicast(c.clockID, c.cfg.Duration, ptp.MessageAnnounce))
if err != nil {
return err
}
c.logSent(ptp.MessageSignaling, "for %s, seq=%d", ptp.MessageAnnounce, seq)
time.Sleep(time.Second)
case stateDone:
cancel()
return nil
}
}
}
})
return eg.Wait()
}