github.com/yggdrasil-network/yggdrasil-go@v0.5.6/src/core/link_unix.go (about) 1 package core 2 3 import ( 4 "context" 5 "net" 6 "net/url" 7 "time" 8 9 "github.com/Arceliar/phony" 10 ) 11 12 type linkUNIX struct { 13 phony.Inbox 14 *links 15 dialer *net.Dialer 16 listener *net.ListenConfig 17 _listeners map[*Listener]context.CancelFunc 18 } 19 20 func (l *links) newLinkUNIX() *linkUNIX { 21 lt := &linkUNIX{ 22 links: l, 23 dialer: &net.Dialer{ 24 Timeout: time.Second * 5, 25 KeepAlive: -1, 26 }, 27 listener: &net.ListenConfig{ 28 KeepAlive: -1, 29 }, 30 _listeners: map[*Listener]context.CancelFunc{}, 31 } 32 return lt 33 } 34 35 func (l *linkUNIX) dial(ctx context.Context, url *url.URL, info linkInfo, options linkOptions) (net.Conn, error) { 36 addr, err := net.ResolveUnixAddr("unix", url.Path) 37 if err != nil { 38 return nil, err 39 } 40 return l.dialer.DialContext(ctx, "unix", addr.String()) 41 } 42 43 func (l *linkUNIX) listen(ctx context.Context, url *url.URL, _ string) (net.Listener, error) { 44 return l.listener.Listen(ctx, "unix", url.Path) 45 }