Comment trouver le numéro de port local d’un socket? (Windows C ++)

Je suis nouveau sur le réseau Windows et j’essaie de trouver le numéro de port auquel mon socket est lié (C ++, Windows 7, Visual Studio 2010 Professional). C’est un socket UDP, et d’après ce que je comprends, l’utilisation de la configuration initiale suivante devrait le lier à un port / une adresse disponible aléatoire:

sockaddr_in local; local.sin_family = AF_INET; local.sin_addr.s_addr = INADDR_ANY; local.sin_port = 0; //randomly selected port int result = bind(clientSock, (sockaddr*)&local, sizeof(local)); //result is always 0 

En ce qui concerne l’utilisation de cette méthode, elle fonctionne pour envoyer des données ou pour la lier à un port spécifique (en remplaçant le 0 par le numéro de port souhaité). Ce dont j’ai besoin, c’est de le lier aléatoirement, puis de trouver le port auquel il était lié par la suite. Est-ce que je peux le faire? Il semble que la structure “locale” contienne “0.0.0.0” comme adresse IP et “0” comme numéro de port.

Merci pour toute aide! Je vous en suis reconnaissant.

Utilisez getsockname . Par exemple:

 struct sockaddr_in sin; int addrlen = sizeof(sin); if(getsockname(clientSock, (struct sockaddr *)&sin, &addrlen) == 0 && sin.sin_family == AF_INET && addrlen == sizeof(sin)) { int local_port = ntohs(sin.sin_port); } else ; // handle error 

Cela fonctionne également pour les systèmes basés sur * nix, mais notez que certains systèmes définissent le troisième argument de getsockname comme étant de type socklen_t* au lieu de int* . code.

getsockname peut l’obtenir pour vous, mais je me demande pourquoi votre code fonctionne avec un socket UDP.