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
}