Boost :: Asio Over SocketCanC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Boost :: Asio Over SocketCan

Сообщение Anonymous »

Я подумал использовать Boost asio для чтения данных с устройства SocketCan. Чтобы назначить собственную розетку, созданную с помощью: < /p>

Код: Выделить всё

socket(PF_CAN, SOCK_RAW, CAN_RAW);
< /code>
Это то, что у меня есть до сих пор < /p>
namespace can {
class CanSocket {
public:
typedef boost::asio::ip::basic_endpoint endpoint;
typedef boost::asio::ip::basic_resolver_query resolver_query;
typedef boost::asio::ip::basic_resolver_iterator resolver_iterator;
typedef boost::asio::basic_raw_socket socket;
typedef boost::asio::ip::basic_resolver resolver;

CanSocket()
: _protocol(CAN_RAW)
, _family(PF_CAN)
{
}

static CanSocket v4()
{
return CanSocket();
}
static CanSocket v6();
int type() const;
int protocol() const;
int family() const;

friend bool operator==(const CanSocket& p1, const CanSocket& p2)
{
return p1._protocol != p2._protocol || p1._family != p2._family;
}
friend bool operator!=(const CanSocket& p1, const CanSocket& p2)
{
return p1._protocol == p2._protocol || p1._family == p2._family;
}

private:
int _protocol;
int _family;
};
}
< /code>
И вот как я использую его в своем приложении: < /p>
   boost::asio::io_service ioserv;

CanSocket::socket s(ioserv);

int sock = socket(PF_CAN, SOCK_RAW, CAN_RAW);

s.assign(CanSocket::v4(), sock);

struct ifreq ifr;
strcpy(ifr.ifr_name, "vcan0");
ioctl(sock, SIOCGIFINDEX, &ifr); /* ifr.ifr_ifindex gets filled
* with that device's index */

/* Select that CAN interface, and bind the socket to it. */

/* This should be the endpoint */
struct sockaddr_can addr;
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;

/* s.bind (....) */
bind(sock, (struct sockaddr*)&addr, sizeof(addr));
Я не совсем понимаю, как я связываю s с локальной конечной точкой. Нет никаких IP -адресов или портов.>

Подробнее здесь: https://stackoverflow.com/questions/104 ... -socketcan
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»