bus.send() fails with `No buffer space available` despite not reaching the timeout
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 48/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Estagnada
- Stack de tecnologia
- linux, python
- Domínio
- networking
Direção de pesquisa
Comece em can/interfaces/socketcan/socketcan.py, especialmente em send() e _send_once(), usando o erro reportado do SocketCAN como ponto de entrada. Reproduza com tests/cantest.py e confirme que os envios repetidos sejam tentados novamente enquanto o timeout ainda não tiver expirado; considera-se concluído quando o caso de 100 frames não gerar mais um erro antecipado quando o espaço do buffer estiver temporariamente indisponível.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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
$ ip -d link show pcan-e
12: pcan-e: <NOARP,UP,LOWER_UP,ECHO> 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 <module>
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:
#!/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()
- Linguagem predominante
- Python
- Estrelas
- 1.6k
- Forks
- 697
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de hardbyte/python-can
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
hardbyte/python-can#2103 ·
-
bug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
hardbyte/python-can#2077 · 1 comentário · 1 reação ·
-
bug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 68/100
hardbyte/python-can#1922 · 1 reação ·
-
enhancement
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 75/100
hardbyte/python-can#2104 ·
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 30/100
hardbyte/python-can#2102 ·
Todas as issues de hardbyte/python-can
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
PedestrianDynamics/pyFDS-Evac#199 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
521xueweihan/HelloGitHub#3790 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
sandialabs/atlas-ui-3#978 ·
Mantenedores costumam responder em até 1 dia
-
area: tests perceived difficulty: 2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Nitjsefnie-Harness-Commons/daedalus#1255 ·
Mantenedores costumam responder em até 1 dia
-
hf-audiolm-qwen: `generate_until` hardcodes `.to("cuda")` and aborts on non-CUDA acceleratorsAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
EleutherAI/lm-evaluation-harness#4256 ·
Mantenedores costumam responder em até 1 dia