in internal/output/tcp/tcp.go [46:70]
func (o *Output) Close() error {
if o.conn != nil {
if err := o.conn.CloseWrite(); err != nil {
return err
}
// drain to facilitate graceful close on the other side
deadline := time.Now().Add(5 * time.Second)
if err := o.conn.SetReadDeadline(deadline); err != nil {
return err
}
buffer := make([]byte, 1024)
for {
_, err := o.conn.Read(buffer)
if errors.Is(err, io.EOF) {
break
} else if err != nil {
return err
}
}
return o.conn.Close()
}
return nil
}