in lib/ec2macossystemmonitor/relayd.go [124:158]
func NewRelay(serialDevice string) (relay SerialRelay, err error) {
// Create a serial connection
serCon, err := NewSerialConnection(serialDevice)
if err != nil {
return SerialRelay{}, fmt.Errorf("relayd: failed to build a connection to serial interface: %s", err)
}
// Clean the socket in case its stale
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: %s", SocketPath, err)
} else {
// Unknown issue, return the error directly
return SerialRelay{}, err
}
}
// Create a listener on the socket by getting the address and then creating a Unix Listener
addr, err := net.ResolveUnixAddr("unix", SocketPath)
if err != nil {
return SerialRelay{}, fmt.Errorf("relayd: unable to resolve address: %s", err)
}
listener, err := net.ListenUnix("unix", addr)
if err != nil {
return SerialRelay{}, fmt.Errorf("relayd: unable to listen on socket: %s", err)
}
// Create the SerialRelay to return
relay.listener = *listener
relay.serialConnection = *serCon
// Create the channel for sending an exit
relay.ReadyToClose = make(chan bool)
return relay, nil
}