Gast
#2121833
Hallo zusammen.
Ich stehe vor folgendem Problem: Ich möchte mir die Errors beim
Versenden einer Nachricht zählen lassen. Bis jetzt sieht der C++ Code so
aus:
(Ich verwende die Standard-Linux CAN-Lib:
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/can.h>
#include <linux/can/raw.h>)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "DebugUtilities.h"
#define OCA_CAN_FLT_MASK 0x1FFFFFE0
#define OCA_CAN_FLT_ID 0x00000500
CSocketCan::CSocketCan() : m_sock(0) {}
CSocketCan::~CSocketCan() { Close(); }
bool CSocketCan::Init(const char* ifname)
{
// make sure it's closed before initializing another socket
Close();
if ((m_sock = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
LOG_DEBUG( "Error opening socket" );
return false;
}
// Turn off all reception
setsockopt( m_sock, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0 );
//int recv_own_msgs( 0 );
//setsockopt(m_sock, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS,
&recv_own_msgs, sizeof(recv_own_msgs));
// detemine address
struct ifreq ifr;
strcpy(ifr.ifr_name, ifname);
ioctl(m_sock, SIOCGIFINDEX, &ifr);
struct sockaddr_can addr;
memset(&addr,0,sizeof(addr)); // Initialize the sockaddr_can
structure.
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
// bind socket to desired address
if (bind(m_sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
LOG_DEBUG( "Error binding to socket address" );
return false;
}
LOG_DEBUG("socket: %i", m_sock);
return true;
}
Dieser Socket müsste ja iwie die Errors speichern, wie greif ich da
genau drauf zu.
Thx shinpei...