Re: include
Auteur:
svear (IP enregistrée)
Date: le 14 février 2004 à 17:13
Ok - Tout d'abord quelques petits trucs qui t'éviteront de gros ennuis
1) toujours mettre les "#include <sys/machin.h>" en premier car ce sont les plus important et il se peut que le "toto.h" qui a besoin du "sys/machin.h" ne l'inclue pas (tout le monde ne programme pas toujours comme il faudrait) donc de ton coté, pour pas avoir de soucis, tu mets tous les <sys/machin.h> en premier, surtout le "<sys/types.h>"
2) Afin d'être tranquille, je te conseille aussi de mettre avant le remplissage de sockname la ligne "memset(&sockname, 0, sizeof(struct sockaddr_in));" afin d'être certain que les zones non-initialisées soient à 0
3) ta ligne "bind" n'est pas bonne mais je comprends ton erreur. Dans le man, tu as lu que le prototype de "bind" acceptait en second argument un "struct sockaddr*" alors tu caste ton pointeur en "struct sockaddr*" ce qui est parfait dans 99% des cas, sauf ici.
En effet, les sockets acceptent des communications an AF_INET ou AF_UNIX. Ainsi, le man de "bind" explique la fonction de façon schématisée pour les deux domaines mais dans la réalité, le "bind" accepte directement des adresses sur un pointeur "sockaddr_in" dans le cas du "INET" et "sockaddr_un" dans le cas du "UNIX".
Voici la ligne que tu dois mettre:
rts=bind(sock, &sockname, sizeof(sockname));
ou bien
rts=bind(sock, &sockname, sizeof(struct sockaddr_in));
4) la ligne "accept" n'est pas bonne du tout. La structure "sockaddr_in" qu'elle reçoit en paramètre est destinée à stocker l'adresse du client qui se connecte à ton serveur. il te faut donc une deuxième variable que tu peux appeler "struct sockaddr_in adr_client" et tu appelle
accept(sock, &adr_client, &lg_addr);
Ici non-plus, pas besoin de caster ton pointeur (mais c'est très propre de le faire)
5) Tu lis une trame sur ta socket (moi j'utilise "read" mais "recv" marche aussi) mais es-tu certain que ta trame contienne bien le "0" final utilisé par "printf" et "strlen" ?
Je pense cependant que ton source est bon et que ton serveur doit marcher. Mais ce n'est pas la peine de mettre "5" dans le "listen", "1" doit suffire puisque tu n'attends apparemment qu'un seul client...