Ошибка Socket Write () в пользовательском классе, но не в главном

Я работаю над простым проектом с использованием библиотеки SocketCAN для отправки некоторых сообщений по CAN. Но теперь я застрял с проблемой, которую я не могу объяснить сам … Когда я использую команду сокета write в пользовательском классе происходит сбой с неверным аргументом (errno: 22 — EINVAL). Чтобы найти свою проблему, я обнародовал весь класс и использовал те же функции, что и в моем классе, в моем main метод это работает …

Пользовательский класс (не работает):

void Can::SendFrame(const can_frame &canFrame) const
{
bcm_message request = CreateSingleNonCyclicFrameTransmissionRequest(canFrame);
int result = write(canSocket, &request, sizeof(request));
}

Основной (рабочий):

Can can;
bcm_message = can.CreateSingleNonCyclicFrameTransmissionRequest(canFrame);
int result = write(can.canSocket, &request, sizeof(request));

Я использую разъем BCM. Розетка подключена и работает нормально (из основного метода).

Есть идеи, в чем может быть проблема?

Редактировать:
Если я создам can_frame в SendFrame() write() не подведет.

void Can::SendFrame(const can_frame &canFrame) const
{
can_frame testFrame;
testFrame.can_dlc = 1;
testFrame.can_id = 0x321;
testFrame.data[0] = 0xde;
auto request2 = CreateSingleNonCyclicFrameTransmissionRequest(testFrame);
int result2 = write(canSocket, &request2, sizeof(request2));
// as before:
bcm_message request = CreateSingleNonCyclicFrameTransmissionRequest(canFrame);
int result = write(canSocket, &request, sizeof(request));
}

Edit2:
Была разница в flags поле созданных запросов. В request2 инициализируется с 0x01 и для request с 0x7effb80… не знаю, откуда это берется … но явно установить его 0x0 решил проблему

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]