зная, какой адаптер используется для подключения к сокету - PullRequest
2 голосов
/ 18 августа 2011

У меня есть приложение Visual Studio 2008 C ++, где я подключаюсь к удаленному TCP-серверу через сокет.Код выглядит в основном так:

SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );
addrinfo* ai = getaddrinfo( ... );
connect( s, ai->ai_addr, sizeof( sockaddr_in ) );

Если у моего локального клиента есть несколько адаптеров, как я могу определить, какой локальный интерфейс использовался для подключения?

Я понимаю, что могу использовать связывание(), чтобы выбрать используемый адаптер, мне любопытно, когда я просто позволю системе выбрать.

1 Ответ

3 голосов
/ 18 августа 2011

Вы можете использовать getsockname, чтобы узнать адрес.

int getsockname(
  __in     SOCKET s,
  __out    struct sockaddr *name,
  __inout  int *namelen
);

struct sockaddr_in sin;
int sinlen = sizeof(sin);
memset(&sin, 0, sizeof(sin));

getsockname(s, (strict sockaddr *)&sin, &sinlen);
...