Я использую Poco HTTPS
и хочу направить все входящие и исходящие пакеты определенного экземпляра класса HTTPSClientSession
только через определенный интерфейс (eth0 или wlan0). Я думаю, что это может быть достигнуто через SO_BINDTODEVICE
, и ниже мой код.
Net::SecureStreamSocket socket(ssl_context);
Net::HTTPSClientSession session(socket);
socket.init(AF_INET);
session.socket().init(AF_INET);
struct ifreq ifr;
memset(&ifr, 0, sizeof(struct ifreq));
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "enp1s0");
session.socket().impl()->setRawOption(SOL_SOCKET, SO_BINDTODEVICE, (void*)&ifr, sizeof(struct ifreq));
session.setHost(hostname);
session.setPort(portnum);
Однако, независимо от набора интерфейсов, он всегда направляет к интерфейсу, который имеет inte rnet. Я пробовал другие форумы, но это не помогло.
У меня есть несколько вопросов:
- Является ли
SO_BINDTODEVICE
правильным способом достижения того, чего я хочу достичь? - Есть ли проблемы с моим кодом?