# 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:

https://www.kernel.org/doc/Documentation/networking/can.txt

## Bus

class `can.interfaces.socketcan.``SocketcanNative_Bus`(channel, receive_own_messages=False, **kwargs)

## Internals

### createSocket

`can.interfaces.socketcan.socketcan_native.``createSocket`(can_protocol=None)

  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.

  Returns:

  - -1 if socket creation unsuccessful
  - socketID - successful creation

### bindSocket

`can.interfaces.socketcan.socketcan_native.``bindSocket`(sock, channel='can0')

  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.

### captureMessage

`can.interfaces.socketcan.socketcan_native.``captureMessage`(sock)

  Captures a message from given socket.

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