Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#2,004 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
linux, python
Área
networking

Línea de trabajo

Empieza en can/interfaces/socketcan/socketcan.py, especialmente en send() y _send_once(), usando el error de SocketCAN reportado como punto de partida. Reproduce el problema con tests/cantest.py y confirma que los envíos repetidos se reintentan mientras el timeout siga vigente; se considera terminado cuando el caso de 100 frames ya no produce un error prematuro cuando el espacio del búfer no está disponible temporalmente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug
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()
Lenguaje dominante
Python
Estrellas
1.6k
Forks
697
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de hardbyte/python-can

Todos los issues de hardbyte/python-can

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.