hardbyte / hardbyte/python-can

bus.send() fails with `No buffer space available` despite not reaching the timeout

Đang mở
#2,004 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug
Ngôn ngữ chính
Python
Star
1.6k
Fork
697
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

### Describe the bug

When sending a lot of packets very quickly to a physical socketcan bus, `bus.send()` raises a `can.exceptions.CanOperationError: Failed to transmit: No buffer space available [Error Code 105]` despite the timeout not being reached.

### To Reproduce

Send 100 frames to a physical socketcan bus with `timeout=1.0` for each frame and no delay between sending the frames.

### Expected behavior

`can.send()` should retry transmission until buffer space is available or the timeout is exceeded.

### Additional context

OS and version: Ubuntu 24.04
Python version: 3.12.3
python-can version: 4.6.1
python-can interface/s (if applicable): `socketcan` (for a CANable 2.0 running CANnectivity)

Traceback and logs

```sh
$ ip -d link show pcan-e
12: pcan-e: mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
link/can promiscuity 0 allmulti 0 minmtu 0 maxmtu 0
can state ERROR-ACTIVE restart-ms 0
bitrate 1024096 sample-point 0.746
tq 5 prop-seg 61 phase-seg1 62 phase-seg2 42 sjw 21 brp 1
gs_usb: tseg1 2..256 tseg2 2..128 sjw 1..128 brp 1..512 brp_inc 1
clock 170000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536 parentbus usb parentdev 1-7.3:1.0
$ time python tests/cantest.py
Traceback (most recent call last):
File "/home/gos/gena-sidl/Integration-Tests/env/lib/python3.12/site-packages/can/interfaces/socketcan/socketcan.py", line 889, in _send_once
sent = self.socket.send(data)
^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 105] No buffer space available

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/gos/gena-sidl/Integration-Tests/tests/cantest.py", line 12, in
bus.send(msg, timeout=1.0)
File "/home/gos/gena-sidl/Integration-Tests/env/lib/python3.12/site-packages/can/interfaces/socketcan/socketcan.py", line 874, in send
sent = self._send_once(data, channel)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/gos/gena-sidl/Integration-Tests/env/lib/python3.12/site-packages/can/interfaces/socketcan/socketcan.py", line 891, in _send_once
raise can.CanOperationError(
can.exceptions.CanOperationError: Failed to transmit: No buffer space available [Error Code 105]
SocketcanBus was not properly shut down

real 0m0.112s
user 0m0.099s
sys 0m0.013s
```

with the following test script:

```python
#!/usr/bin/env python3

import can

N_PACKETS = 100

bus = can.Bus(interface="socketcan", channel="pcan-e")

data = bytes([0xAB] * 8)
for _ in range(N_PACKETS):
msg = can.Message(arbitration_id=1, is_extended_id=True, data=data)
bus.send(msg, timeout=1.0)

bus.shutdown()
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.