Au lieu de transmettre à bind() ton port testé en boucle via my_addr.sin_port = htons(port++), il te suffit de mettre sin_port à 0 : bind() t'allouera automatiquement un port libre.
Pour récupérer le port ainsi alloué à ta socket "sockfd" , utilise getsockname:
struct sockaddr_in name;
int namelen;
Cependant, sache que tu n'as pas besoin de communiquer explicitement ton port via un protocole à toi au maître : du moment que tu fais une connexion à sa socket (via un connect() ou un sendto()), le maitre récupère automatiquement l'identifiant (IP, port) de l'appelant (man getpeername). Tu peux donc te contenter de fournir juste l'UID.
# bind(0)
Posté par daggett . En réponse au message Obtenir le numero d'un port réseau libre. Évalué à 3.
Pour récupérer le port ainsi alloué à ta socket "sockfd" , utilise getsockname:
struct sockaddr_in name;
int namelen;
namelen = sizeof(name);
err = getsockname(sockfd, &name, &namelen);
printf(" err = %d, port alloué = %d\n", err, ntohs(name.sin_port));
Cependant, sache que tu n'as pas besoin de communiquer explicitement ton port via un protocole à toi au maître : du moment que tu fais une connexion à sa socket (via un connect() ou un sendto()), le maitre récupère automatiquement l'identifiant (IP, port) de l'appelant (man getpeername). Tu peux donc te contenter de fournir juste l'UID.