Bonjour amis développeurs,

J'essaye de mettre en place un serveur en C pour apprendre à manipuler les Sockets, mais je me heurte à un soucis que je ne comprend pas.

Ci dessous vous pouvez trouver le code qui me pose soucis :

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
 
#define TAILLE_MAX_DONNEE	1024
#define SOCKET_PATH "/Users/TariC/Documents/socket/sock"
int main()
{
	socklen_t longueur_adresse;
	struct sockaddr_un adresse;
	int fd;
 
	adresse.sun_family = AF_LOCAL;
	strcpy(adresse.sun_path, SOCKET_PATH);
	longueur_adresse = SUN_LEN(&adresse);
 
 
	fd = socket(PF_LOCAL, SOCK_DGRAM, 0);
 
	if (fd < 0) {
		abandon("Création du socket serveur");
	}
 
	if (bind(fd, (struct sockaddr *) &adresse, longueur_adresse) < 0) {
		abandon("Nommage du socket serveur");
	}
 
	printf("> Serveur demarre sur le socket local\n");
 
	while (1) {
		int lg;
		char tampon[TAILLE_MAX_DONNEE+1];
		lg = recvfrom(lg, tampon, TAILLE_MAX_DONNEE, 0, NULL, NULL);
		if (lg <= 0) {
			abandon("Reception datagramme");
		}
		tampon[lg] = '\0';
		printf("Recu : %s\n", tampon);
		if (strcmp(tampon, "stop") == 0) {
			printf("> arret demande\n");
			break;
		}
	}
 
	close(fd);
 
	return EXIT_SUCCESS;
}
Le domaine du socket est local (PF_LOCAL). Le programme est censé afficher les messages qu'il reçoit jusqu'à la reception du message "stop" qui mettra fin à l'execution.

Tout semble bien se passer jusqu'au recvfrom(). Je vous laisse une trace d'execution :

Reception datagramme: Bad file descriptor
> Serveur demarre sur le socket local
Je précise que le fichier /Users/TariC/Documents/socket/sock est bien créé.

Quelqu'un pourrait-il m'aider à trouver mon erreur ?

D'avance merci