众所周知,在CAN总线通信协议中,发送方知道数据是否发送成功。我发送socketcan数据如下。
ret = write (socket, frame, sizeof (struct can_frame));
但是即使CAN通讯线断开了,ret的返回值仍然是16(=sizeof(struct can_frame))。我查询了资料,发现问题出在socketcan使用的网络栈的tx_queue上。多次调用write时,缓冲区已满,ret的返回值为-1。但这不是我所期望的行为,我希望发送的每一帧数据都会立即获得成功或失败的状态。经过
echo 0> / sys / class / net / can0 / tx_queue_len
我想取消 tx_queue,但它不起作用。我想问的是,有没有办法取消socketcan的tx_queue,或者通过API(如libsocketcan)获取关于控制器的每个发送帧的状态。谢谢。