ollie/toolsrv/dial.go

26 lines
632 B
Go

package toolsrv
import (
"context"
"fmt"
"net"
)
// Dial connects to a running tool server at the given Unix socket path.
// The server must already be running (started via Spawn or SpawnRemote).
func Dial(ctx context.Context, socket string) (*Conn, error) {
if socket == "" {
return nil, fmt.Errorf("toolsrv.Dial: socket path required")
}
conn, err := net.Dial("unix", socket)
if err != nil {
return nil, fmt.Errorf("toolsrv.Dial: %w", err)
}
c := NewConn(conn, func() { conn.Close() })
if err := c.Ping(); err != nil {
c.Close()
return nil, fmt.Errorf("toolsrv.Dial: ping failed: %w", err)
}
return c, nil
}