Pb bizarre sur connect

Pb bizarre sur connect - C - Programmation

Marsh Posté le 10-04-2006 à 12:03:34    

Salut,
j'ai un bout de code qui me  sort une erreur mais qui a l'air de fonctionner.
[

Code :
  1. #include<stdio.h>
  2. #include<unistd.h>
  3. #include<arpa/inet.h>
  4. #include<netdb.h>
  5. #include<netinet/in.h>
  6. #include<sys/types.h>
  7. #include<sys/socket.h>
  8. main(argc,argv)
  9. int argc;
  10. char** argv;
  11. {
  12.   int sock_com,nb_caract_lus;
  13.   struct sockaddr_in  adresse_distant;
  14.   char buffer[1024];
  15.   char* port="23";
  16.   memset(&adresse_distant,0,sizeof( struct sockaddr_in));
  17.   if((adresse_distant.sin_addr.s_addr=inet_addr(argv[1]))==INADDR_NONE)
  18.     {
  19.     perror ("\nErreur sur l'adresse ip" );
  20.     exit(1);
  21.     }
  22. adresse_distant.sin_family=AF_INET;
  23. adresse_distant.sin_port=htons(atoi(port));
  24. if((sock_com=socket(AF_INET,SOCK_STREAM,0))<0)
  25.    perror("\nerreur sur socket" );
  26. printf("\nNumero de socket attribuee %d\n",sock_com);
  27. printf("\nDemande de connection sur distant" );
  28. if(connect(sock_com, &adresse_distant, sizeof (struct sockaddr_in))<0)
  29.    perror("\nerreur sur connect" );
  30. printf("\nconnexion reussie" );
  31. printf("\nResultat de l'initialistion de la structure sockaddr_in" );
  32. printf("\nadresse: en hexa %08X\ten decimal pointee %s\nNumero de port en Hexa %08X\ten decimal %d",ntohl(adresse_distant.sin_addr.s_addr),inet_ntoa(adresse_distant.sin_addr),ntohs(adresse_distant.sin_port),ntohs(adresse_distant.sin_port));
  33. }


Quand je compile j'ai l'erreur :
communication1.c:30: warning: passing arg 2 of `connect' from incompatible pointer type
et quand je lance ca marche. Ou est l'erreur?

Reply

Marsh Posté le 10-04-2006 à 12:03:34   

Reply

Marsh Posté le 10-04-2006 à 12:06:11    

il manque un cast d'adresse_distant
 
regarde le prototype de connect, et regarde le type des arguments que tu lui passes

Reply

Marsh Posté le 10-04-2006 à 12:07:09    

Spoiler :

connect(sock_com, (SOCKADDR*)&adresse_distant, ...


Message édité par _darkalt3_ le 10-04-2006 à 12:07:47
Reply

Marsh Posté le 10-04-2006 à 12:18:35    

je lui passe bien comme 2ieme argument l'adresse d'une variable de type struct addr_in
pourquoi aurai je besoin d'un cast? je ne vois pas trop.

Reply

Marsh Posté le 10-04-2006 à 13:42:46    

Code :
  1. sock_com=socket(AF_INET,SOCK_STREAM,0)


J'ai cru voir dans un autre post que c'etait PF_INET (au lieu de AF_) à utiliser à cet endroit?

Reply

Marsh Posté le 10-04-2006 à 13:55:49    

Oui en effet on peut utiliser les deux mais je crois qu'il y en a un normalise pou addr_family et l'autre pour les socket amis d'apres ce que j'en ai lu c'est indifferent.
On peut vouloir respecter la norme mais je ne crois pas que cela gene le prog.

Reply

Marsh Posté le 10-04-2006 à 13:58:14    

yartempion a écrit :

On peut vouloir respecter la norme mais je ne crois pas que cela gene le prog.


 
 [:atari]  

Reply

Marsh Posté le 10-04-2006 à 14:12:14    

Oui tu as raison j'ai pas fait attention que je passai une struct sockaddr_in au lieu d'une sockaddr. OK merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed