mirror of https://github.com/k3s-io/k3s
47 lines
850 B
Go
47 lines
850 B
Go
package pipe
|
|
|
|
import (
|
|
"io"
|
|
"net"
|
|
|
|
"github.com/lxc/lxd/shared/eagain"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func UnixPiper(srcs <-chan net.Conn, bindAddress string) {
|
|
for src := range srcs {
|
|
go Unix(src, bindAddress)
|
|
}
|
|
}
|
|
|
|
func Unix(src net.Conn, target string) error {
|
|
dst, err := net.Dial("unix", target)
|
|
if err != nil {
|
|
src.Close()
|
|
return err
|
|
}
|
|
|
|
Connect(src, dst)
|
|
return nil
|
|
}
|
|
|
|
func Connect(src net.Conn, dst net.Conn) {
|
|
go func() {
|
|
_, err := io.Copy(eagain.Writer{Writer: dst}, eagain.Reader{Reader: src})
|
|
if err != nil && err != io.EOF {
|
|
logrus.Warnf("copy pipe src->dst closed: %v", err)
|
|
}
|
|
src.Close()
|
|
dst.Close()
|
|
}()
|
|
|
|
go func() {
|
|
_, err := io.Copy(eagain.Writer{Writer: src}, eagain.Reader{Reader: dst})
|
|
if err != nil {
|
|
logrus.Warnf("copy pipe dst->src closed: %v", err)
|
|
}
|
|
src.Close()
|
|
dst.Close()
|
|
}()
|
|
}
|