func NewRelay()

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
}