2009-05-14 7 views
0

J'essaie de répertorier les interfaces disponibles à l'aide de la fonction WSAIoctl. Je dois passer dans un tampon pour contenir la liste complète. Je veux obtenir un compte des interfaces avant que j'assigne de la mémoire pour maintenir les détails d'interface mais si je passe dans un pointeur NULL l'appel échoue juste (je ne reçois pas un nombre valide retourné). Tout moyen d'obtenir ce compte avant que je dois allouer de la mémoire?Comptage des interfaces réseau avec la fonction WSAIoctl (API WIN32)

fond est que je commence une charge de processus/threads sur la machine de Windows qui se connectent tous à un seul serveur. Je veux que le serveur voit ces connexions individuelles comme provenant d'adresses IP différentes et j'ai ajouté une charge d'alias à la machine de test pour permettre cela (beaucoup). Le WSAIoct trouve correctement tous ceux que j'ai ajoutés.

... Vive

Répondre

1

De l'msdn documentation pour WSAIoctl:

Remarque: Si le tampon de sortie n'est pas assez grand pour contenir l'adresse liste , SOCKET_ERROR est retourné comme résultat de cet IOCTL et WSAGetLastError renvoie WSAEFAULT. La taille requise, en octets, du tampon de sortie est retourné dans le paramètre lpcbBytesReturned dans ce cas. Notez le code d'erreur WSAEFAULT est également renvoyée si le paramètre lpvInBuffer, lpvOutBuffer ou lpcbBytesReturned est pas complètement contenue dans une partie valide de l'espace d'adressage utilisateur .

Vous devez donc appeler la fonction WSAIoctl deux fois. La première fois avec un tampon arbitraire et vérifiez ensuite les codes d'erreur mentionnés dans la documentation. Utilisez ensuite la taille retournée dans lpcbBytesReturned pour allouer le tampon et appelez la fonction WSAIoctl une seconde fois.

+0

hmmn, cela fonctionne pour SIO_ADDRESS_LIST_QUERY, je reçois une réponse différente pour la liste des SIO_GET_INTERFACE. Vous cherchez à voir quelles sont les différences .... –

+0

Vous avez raison, je suppose que vous avez utilisé SIO_ADDRESS_LIST_QUERY. Je n'ai jamais utilisé SIO_GET_INTERFACE, j'ai donc peur de ne pas pouvoir vous aider davantage. S'il vous plaît laissez-nous savoir si vous trouvez une solution. –

Questions connexes