func()

in pkg/dnsmasq/nanny.go [123:169]


func (n *Nanny) Start() error {
	klog.V(0).Infof("Starting dnsmasq %v", n.args)

	n.cmd = exec.Command(n.Exec, n.args...)
	stderrReader, err := n.cmd.StderrPipe()
	if err != nil {
		return err
	}

	stdoutReader, err := n.cmd.StdoutPipe()
	if err != nil {
		return err
	}

	if err := n.cmd.Start(); err != nil {
		return err
	}

	logToGlog := func(stream string, reader io.Reader) {
		bufReader := bufio.NewReader(reader)
		for {
			bytes, err := bufReader.ReadBytes('\n')
			if len(bytes) > 0 {
				klog.V(1).Infof("%v", string(bytes))
			}
			if err == io.EOF {
				klog.V(1).Infof("%v", string(bytes))
				klog.Warningf("Got EOF from %v", stream)
				return
			} else if err != nil {
				klog.V(1).Infof("%v", string(bytes))
				klog.Errorf("Error reading from %v: %v", stream, err)
				return
			}
		}
	}

	go logToGlog("stderr", stderrReader)
	go logToGlog("stdout", stdoutReader)

	n.ExitChannel = make(chan error)
	go func() {
		n.ExitChannel <- n.cmd.Wait()
	}()

	return nil
}