Я подумал использовать Boost asio для чтения данных с устройства SocketCan. Чтобы назначить собственную розетку, созданную с помощью: < /p> [code]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;
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)); [/code] Я не совсем понимаю, как я связываю s с локальной конечной точкой. Нет никаких IP -адресов или портов.>