in internal/proxy/proxy.go [759:827]
func newSocketMount(ctx context.Context, conf *Config, pc *portConfig, inst InstanceConnConfig) (*socketMount, error) {
shortInst, err := ShortInstURI(inst.Name)
if err != nil {
return nil, err
}
var (
// network is one of "tcp" or "unix"
network string
// address is either a TCP host port, or a Unix socket
address string
)
// IF
// a global Unix socket directory is NOT set AND
// an instance-level Unix socket is NOT set
// (e.g., I didn't set a Unix socket globally or for this instance)
// OR
// an instance-level TCP address or port IS set
// (e.g., I'm overriding any global settings to use TCP for this
// instance)
// use a TCP listener.
// Otherwise, use a Unix socket.
if (conf.UnixSocket == "" && inst.UnixSocket == "" && inst.UnixSocketPath == "") ||
(inst.Addr != "" || inst.Port != 0) {
network = "tcp"
a := conf.Addr
if inst.Addr != "" {
a = inst.Addr
}
var np int
switch {
case inst.Port != 0:
np = inst.Port
default:
np = pc.nextPort()
}
address = net.JoinHostPort(a, fmt.Sprint(np))
} else {
network = "unix"
address, err = newUnixSocketMount(inst, conf.UnixSocket, true)
if err != nil {
return nil, err
}
}
lc := net.ListenConfig{KeepAlive: 30 * time.Second}
ln, err := lc.Listen(ctx, network, address)
if err != nil {
return nil, err
}
// Change file permisions to allow access for user, group, and other.
if network == "unix" {
// Best effort. If this call fails, group and other won't have write
// access.
_ = os.Chmod(address, 0777)
}
opts := dialOptions(*conf, inst)
m := &socketMount{
inst: inst.Name,
instShort: shortInst,
listener: ln,
dialOpts: opts,
}
return m, nil
}