Подсчитать сетевые интерфейсы с помощью функции WSAIoctl (WIN32 API) - PullRequest
0 голосов
/ 14 мая 2009

Я пытаюсь перечислить доступные интерфейсы, используя функцию WSAIoctl. Я должен передать в буфер для хранения полного списка. Я хочу получить количество интерфейсов до того, как выделю память для хранения сведений об интерфейсе, но если я передам NULL-указатель, вызов просто завершится неудачно (я не получу верное число) Любой способ получить это число, прежде чем я должен выделить память?

Фоном является то, что я запускаю загрузку процессов / потоков на компьютере Windows, которые все подключаются к одному серверу. Я хочу, чтобы сервер видел эти индивидуальные подключения как исходящие с разных IP-адресов, и я добавил загрузку псевдонимов на тестовую машину, чтобы учесть это (много). WSAIoct правильно находит все, что я добавил.

Приветствия ...

1 Ответ

1 голос
/ 14 мая 2009

Из документации msdn для WSAIoctl:

Примечание : если выходной буфер не достаточно большой, чтобы вместить адрес список, SOCKET_ERROR возвращается как результат этого IOCTL и WSAGetLastError возвращает WSAEFAULT. требуемый размер в байтах для выходной буфер возвращается в Параметр lpcbBytesReturned в этом дело. Обратите внимание, что код ошибки WSAEFAULT также возвращается, если lpvInBuffer, lpvOutBuffer или lpcbBytesReturned параметр не полностью содержится в действительной части адреса пользователя пространство.

Итак, вам нужно вызвать функцию WSAIoctl дважды. Первый раз с произвольным буфером, а затем проверьте коды ошибок, указанные в документации. Затем используйте размер, возвращенный в lpcbBytesReturned, чтобы выделить буфер и вызвать функцию WSAIoctl во второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...