in lib/ec2macossystemmonitor/relayd.go [135:171]
func NewRelay(serialDevice string) (relay SerialRelay, err error) {
const socketPath = DefaultRelaydSocketPath
// Create a serial connection
serCon, err := NewSerialConnection(serialDevice)
if err != nil {
return SerialRelay{}, fmt.Errorf("relayd: failed to build a connection to serial interface: %w", err)
}
// Remove
if err = os.RemoveAll(socketPath); err != nil {
if _, ok := err.(*os.PathError); ok {
// Help guide that the SocketPath is invalid
return SerialRelay{}, fmt.Errorf("relayd: unable to clean %s: %w", socketPath, err)
} else {
// Unknown issue, return the error directly
return SerialRelay{}, err
}
}
// Create the UDS listener.
addr, err := net.ResolveUnixAddr("unix", DefaultRelaydSocketPath)
if err != nil {
return SerialRelay{}, fmt.Errorf("relayd: unable to resolve address: %w", err)
}
listener, err := net.ListenUnix("unix", addr)
if err != nil {
return SerialRelay{}, fmt.Errorf("relayd: unable to listen on socket: %w", err)
}
return SerialRelay{
listener: listener,
serialConnection: serCon,
ReadyToClose: make(chan bool),
}, nil
}