Voila tout est dans le titre... Lors d'un connect() à un serveur en tcp, je recois cette erreur: Address family not supported by protocol..

les 2 socket sont créées en TCP et bindé comme il faut...

Voici les sources..


SEVEUR:

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
void graine()
{
	char nomFichier[50] ;	
 
	int fd ;
	int lg = sizeof(struct sockaddr_in) ;
	struct sockaddr_in client;
 
	printf("Taper le nom du fichier à partager\n") ;
	scanf("%s", nomFichier) ;
 
	decoupe(nomFichier) ;
 
 
	execlp("./tracker", "./tracker", nomFichier, NULL);
 
	int s_ecoute = createBindInetSocketTCP(SOCK_STREAM,1234) ;
 
	if (listen(s_ecoute,10)<0)
	{
		perror("erreur listen") ;
		exit(-2) ;
 
	}
	else
 
	if ((fd=accept(s_ecoute, (struct sockaddr *)&client,&lg))==-1)
	{
		perror("erreur accept") ;
		exit(-1) ;
 
	}	
 
 
 
}
CLIENT:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
void pair()
{
	int s = createBindInetSocket(SOCK_DGRAM, 1236) ;
	int sTCP = createBindInetSocketTCP(SOCK_STREAM,1236) ;
	char c ;
	struct sockaddr_in tracker ;
	struct hostent * host ;
	char nombreBloc[10] ;
	int lg=sizeof(struct sockaddr_in)  ;
	int nbBloc ;
	int k ;
	struct sockaddr_in * reponse = malloc(sizeof(struct sockaddr_in)) ; 
 
	host = gethostbyname("localhost") ; //adresse du serveur qui est en localhost ici
 
	tracker.sin_family = AF_INET ;
	tracker.sin_port = htons(1238) ;
 
	memcpy(&tracker.sin_addr, host->h_addr, sizeof(tracker.sin_addr)) ;
 
	if (sendto(s,"info?",strlen("info?"),0, (struct sockaddr *)&tracker, sizeof(tracker))<0)
	{
		perror("sendto info?");
		exit(-2) ;
 
	}
 
 
 
 
 
	if(recvfrom(s,nombreBloc,10, 0, (struct sockaddr *) &tracker, &lg)<0)
	{
		perror("Erreur lors de la reception du nombre de blocs\n") ;
	}
 
	sscanf(nombreBloc, "%d", &nbBloc) ;
 
 
 
	int tab[nbBloc] ;
 
	for(k=0 ; k<nbBloc;k++) // on initialise le tableau : 1 quand le client a le bloc 0 sinon
	{
		tab[k]=0 ;
	}
	while(1)
	{	
		int continu=1 ;
 
		for (k=0 ; k<nbBloc && continu ; k++) //recherche du numéro de bloc à télécharger.
		{
			if (tab[k]==0)
			{	
				continu = 0 ;
				char bloc[10] ;
 
				sprintf(bloc, "%d", k) ;
 
				if (sendto(s,bloc,strlen(bloc),0, (struct sockaddr *)&tracker, sizeof(tracker))<0)
				{
					perror("sendto bloc?");
					exit(-2) ;
				}
 
 
 
 
				printf("%s\n", inet_ntoa(reponse->sin_addr.s_addr)) ;	
				if(recvfrom(s,reponse,sizeof(struct sockaddr_in), 0, (struct sockaddr *) &tracker, &lg)<0)
				{
					perror("Erreur lors de la reception de la réponse") ;
					exit(-1) ;
				}	
 
				printf("%s\n", inet_ntoa(reponse->sin_addr.s_addr)) ;	
 
			}
 
 
		}
 
	//on passe en tcp pour le téléchargement du bloc.
 
		if (connect(sTCP, (struct sockaddr*)&reponse, sizeof (struct sockaddr_in))<0)
		{
			perror("erreur connect") ;
			exit(-1) ;
		}	
		else
		{
			printf("connect réussi");
 
 
		}
 
 
	}	
 
 
 
 
}