Erreur : Bad file descriptor sur socket
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:
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 :
Citation:
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 ;)