> Если отправляется сообщение на шину, но на шине нет приемника,
> при этом через несколько секунд после отправки в консоль выводится
> сообщение о таймауте отправки. Но осциллографом я вижу, что это
> сообщение бесконечно отправляется на шину
Оно не должно отравляться бесконечно, сообщения (с ошибками) отправляются
пока счётчик ошибок при передаче (TEC в документации на MCP2515) не достигнет
определённого значения. После чего они перестают передаваться, а устройство входит
в одно из состояний ошибок (active, passive, bus-off).
> ifconfig can0 down ifconfig can0 up не помогает
Выходить из этого состояния устройство должно автоматически: при определённых условиях.
> Как программно определить, что приемник не получил сообщения
Вероятно определить какая ошибка в каком конкретно сообщении не получится, так как инф.
об ошибках получается в прерывании. Общее состояние должно быть в статистике интерфейса.
> доставлены ли они физически или нет
Может быть вам нужен какой-то более высокоуровневый протокол поверх CAN?