SocketCAN (python)

Python 3.3 added support for socketcan for linux systems.

The socketcan_native interface directly uses Python’s socket module to access SocketCAN on linux. This is the most direct route to the kernel and should provide the most responsive.

The implementation features efficient filtering of can_id’s, this filtering occurs in the kernel and is much much more efficient than filtering messages in Python.

Python 3.4 added support for the Broadcast Connection Manager (BCM) protocol, which if enabled should be used for queueing periodic tasks.

Documentation for the socket can backend file can be found:


class can.interfaces.socketcan.SocketcanNative_Bus(channel, receive_own_messages=False, **kwargs)[source]

Bases: can.bus.BusABC

  • channel (str) – The can interface name with which to create this bus. An example channel would be ‘vcan0’.
  • receive_own_messages (bool) – If messages transmitted should also be received back.
  • can_filters (list) – A list of dictionaries, each containing a “can_id” and a “can_mask”.




Creates a CAN socket. The socket can be BCM or RAW. The socket will be returned unbound to any interface.

Parameters:can_protocol (int) –
The protocol to use for the CAN socket, either:
  • socket.CAN_RAW
  • socket.CAN_BCM.
  • -1 if socket creation unsuccessful
  • socketID - successful creation


can.interfaces.socketcan.socketcan_native.bindSocket(sock, channel='can0')[source]

Binds the given socket to the given interface.

Parameters:socketID (Socket) – The ID of the socket to be bound
Raise:OSError if the specified interface isn’t found.



Captures a message from given socket.

Parameters:sock (socket) – The socket to read a message from.
Returns:The received message, or None on failure.