Привязка экземпляра HTTPS Poco к определенному интерфейсу (eth0) в Linux - PullRequest
0 голосов
/ 15 марта 2020

Я использую 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. Я пробовал другие форумы, но это не помогло.

У меня есть несколько вопросов:

  1. Является ли SO_BINDTODEVICE правильным способом достижения того, чего я хочу достичь?
  2. Есть ли проблемы с моим кодом?
...