Как Socket может получить статус ошибки отправки? - PullRequest
0 голосов
/ 18 марта 2020

Как мы все знаем, в протоколе связи по шине CAN отправитель знает, были ли данные успешно отправлены. Я посылаю данные socketcan следующим образом.

ret = write (socket, frame, sizeof (struct can_frame));

Однако, даже если коммуникационный кабель CAN отключен, возвращаемое значение ret все еще равно 16 (= sizeof (struct can_frame)). Я запросил информацию и нашел что проблема была из-за tx_queue сетевого стека, используемого socketcan. Когда запись вызывается несколько раз, буфер заполнен, а возвращаемое значение ret равно -1. Но это не то поведение, которого я ожидаю, я надеюсь, что каждый отправленный кадр данных немедленно получит статус успеха или неудачи. По

echo 0> / sys / class / net / can0 / tx_queue_len

Я хочу отменить tx_queue, но он не работает. Я хочу спросить, есть ли способ отменить tx_queue для socketcan или получить статус каждого кадра отправки о контроллере через API (например, libsocketcan). Спасибо.

...