19 addr.can_family = AF_CAN;
29 addr.can_family = AF_CAN;
39 socklen_t addr_len =
sizeof(addr);
41 if( getsockname(
m_socket, (sockaddr*) &addr, &addr_len) < 0)
50 socklen_t addr_len =
sizeof(addr);
52 if( getpeername(
m_socket, (sockaddr*) &addr, &addr_len) < 0)
61 ifr.ifr_ifindex = addr.can_ifindex;
63 if( ioctl(
m_socket, SIOCGIFNAME, &ifr) < 0)
66 return std::string(ifr.ifr_name);
71 const int len = interface.length();
73 if(
len == 0)
return 0;
76 if(
len >= IF_NAMESIZE-1)
80 std::memcpy( ifr.ifr_name, interface.data(),
len);
81 ifr.ifr_name[
len] = 0;
83 if( ioctl(
m_socket, SIOCGIFINDEX, &ifr) < 0)
86 return ifr.ifr_ifindex;
std::string getLocalInterface() const
int getInterfaceIndex(std::string_view interface) const
get CAN interface index from interface name
CANSocket(int type, int protocol)
allows a subclass to create new socket
void bind(std::string_view interface="")
std::string getInterfaceName(const sockaddr_can &addr) const
get CAN interface name from socket address structure
std::string getForeignInterface() const
void connect(std::string_view interface="")
Signals a problem with the execution of a socket call.
SimpleSocket(int sockfd)
enables return of an accepted socket