Bonjour à tous,

Voici un représentation schématique de mon code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

void envoyer_calcul(char *addr)
{
    int pid = fork();
    if(pid == 0 ) {
       execlp(un_programme_qui_demande_quelquechose_au_serveur_avec_un_socket);
    }
}

void gerer_liste_serveur()
{
    fd = creer_socket();
    while(1) {
        accept(fd, serveur);
        ajouter_a_la_liste_le_serveur(liste_serveur, serveur);
        pthread_mutex_lock(&cond_mutex);
        pthread_cond_signal(&condition);
        pthread_mutex_unlock(&cond_mutex);
    }
}

void get_serveur(char *ip_addr)
{
        if(is_empty(liste_serveur)) {
            pthread_mutex_lock(&cond_mutex);
            pthread_cond_wait(&condition, &cond_mutex);
            pthread_mutex_unlock(&cond_mutex);
        }

         strcpy(ip_addr, tete_liste(serveur)->ip);
}

int main()
{
    creer_thread(gerer_liste_serveur);
    while(1) {
        get_serveur(ip_addr);
        envoyer_calcul(ip_addr);
    }
}
Mon problème c'est que le programme fils qui est exécuté après le fork (grâce
au execlp), n'arrive pas a se connecter ("connect: Connection refused") lorsque le flot
d'éxécution passe par pthread_cond_wait. L'erreur ne se produit que lors du premier tour
de boucle la (while(1) { get_serveur; envoyer_calcul;}).

Par contre si le flot d'exécution ne passe pas par pthread_cond_wait, le programme éxécuté par le fork fonctionne correctement.

Quelqu'un a déjà connu un problème similaire, ou arriverait à m'éclairer ?

D'avance merci.