func NewRelay()

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
}