• # bind(0)

    Posté par . En réponse au message Obtenir le numero d'un port réseau libre. Évalué à 3.

    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;

    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.