func PrepareClient()

in cmd/ptpcheck/checker/checker.go [109:146]


func PrepareClient(address string) (c *ptp.MgmtClient, cleanup func(), err error) {
	timeout := 5 * time.Second
	base, _ := path.Split(address)
	var conn *net.UnixConn
	local := path.Join(base, fmt.Sprintf("ptpcheck.%d.sock", os.Getpid()))
	// cleanup
	cleanup = func() {
		if conn != nil {
			if err := conn.Close(); err != nil {
				log.Warningf("closing connection: %v", err)
			}
		}
		if err := os.RemoveAll(local); err != nil {
			log.Warningf("removing socket: %v", err)
		}
	}
	deadline := time.Now().Add(timeout)

	addr, err := net.ResolveUnixAddr("unixgram", address)
	if err != nil {
		return nil, cleanup, err
	}
	localAddr, _ := net.ResolveUnixAddr("unixgram", local)
	conn, err = net.DialUnix("unixgram", localAddr, addr)
	if err != nil {
		return nil, cleanup, err
	}

	if err := os.Chmod(local, 0666); err != nil {
		return nil, cleanup, err
	}
	if err := conn.SetReadDeadline(deadline); err != nil {
		return nil, cleanup, err
	}
	return &ptp.MgmtClient{
		Connection: conn,
	}, cleanup, err
}