socket ipv6 (client/serveur)
Salut!
je cherche à travailler avec des socket sur ipv6. Malheureusement la doc est pas toujours tres claire. J'ai malgré tout une version compilable mais qui ne fait rien (?)
voila le code client et serveur :
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 46 47 48
|
main (argc, argv) int argc; char *argv[ ];
{
int sdi;
struct sockaddr_in6 src;
bzero(&src , sizeof(src));
if ((sdi = socket(PF_INET6, SOCK_DGRAM, 0)) < 0){
printf("Error : Cannot acquire socket. Application will now exit");
exit(-1);
}
src.sin6_family = AF_INET6;
src.sin6_port = htons(PORT);
src.sin6_addr = in6addr_any;
//inet_pton(AF_INET6, &in6addr_any, &src.sin6_addr);
if (bind(sdi, (struct sockaddr *) &src , sizeof(src)) < 0){
printf("Error : Cannot bind socket. Application will now exit");
exit(-1);
}
while (TRUE) {
struct sockaddr_in6 from;
bzero(&from, sizeof(from));
int from_len=0;
void *buff = malloc(sizeof("coucou les amis"));
if ( recvfrom(sdi, buff, sizeof("coucou les amis"), 0, (struct sockaddr *) &from, &from_len) < 0)
printf("Warning - Bad message received");
printf("message recu!");
printf("%s",buff);
free(buff);
}
return 0;
} |
et le client qui envoie un simple message :
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
|
main (argc, argv) int argc; char *argv[ ];
{
int sdi;
struct sockaddr_in6 src;
bzero(&src , sizeof(src));
if ((sdi = socket(PF_INET6, SOCK_DGRAM, 0)) < 0){
printf("Error : Cannot acquire socket. Application will now exit");
exit(-1);
}
src.sin6_family = AF_INET6;
src.sin6_addr = in6addr_any;
//inet_pton(AF_INET6, &in6addr_any, &src.sin6_addr);
if (bind(sdi, (struct sockaddr *) &src , sizeof(src)) < 0){
printf("Error : Cannot bind socket. Application will now exit");
exit(-1);
}
struct sockaddr_in6 to;
bzero(&to, sizeof(to));
to.sin6_family = AF_INET6;
to.sin6_port = htons(PORT);
to.sin6_addr = in6addr_loopback;
int from_len=0;
char *msg = "coucou les amis";
if ( sendto(sdi, msg, sizeof(msg), 0, (struct sockaddr *) &to, sizeof(to)) < 0)
printf("Warning - Bad message received");
printf("message envoyé : %s",msg);
return 0;
} |
Les deux compilent. A l'exécution, le seveur démarre mais bloque sur le recvfrom. Si je met le recvfrom en commentaire, je vois avec des printf qu'il arrive jusque la. Si je le met pas en commentaire, aucun printf ne s'affiche (meme si il est à la 1ere ligne du main). Quand j'execute le client. Il parvient à envoyer le message (du moins aucune erreur) mais le seveur ne recoit rien.
Quelqu'un peut m'aider à identifier le prob?
merci bcp!