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  }