Votre question

[C] Problème de Socket UNIX

Tags :
  • Debian
  • Programmation
Dernière réponse : dans Programmation
30 Juin 2006 20:07:26

Bonjour,

J'ai décidé de me mettre à la programmation des sockets. J'ai donc démarré ma Debian, et ai commencé à coder. Après quelques problèmes, il en reste un (ou deux ?) qui me résistent... Voici le code :

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3.  
  4. int main()
  5. {
  6. struct sockaddr_in address;
  7. memset(&address, 0, sizeof(struct sockaddr_in));
  8.  
  9. int iSocket = socket(AF_INET, SOCK_DGRAM, 0);
  10.  
  11. address.sin_family = AF_INET;
  12. address.sin_port = htons(10314);
  13.  
  14. bind(iSocket, &address, sizeof(address));
  15.  
  16. close(iSocket);
  17.  
  18. return 0;
  19. }

Et lors de la compilation, j'ai droit à une erreur :
  1. main.c:16: error: storage size of 'address' isn't known
  2. main.c:17: error: invalid application of 'sizeof' to an incomplete type


Si quelqu'un a une idée, je suis preneur ! :-) A noter que je n'ai pas très bien compris... La structure est déjà défini dans un des headers, non ? Alors pourquoi devoir déclarer sa taille ?

Merci beaucoup !

Autres pages sur : probleme socket unix

a b L Programmation
3 Juillet 2006 21:08:25

Remplace
  1. le sizeof(address);
par
  1. sizeof(struct sockaddr_in);
4 Juillet 2006 13:11:22

voici le code corrigé (passe avec -Wall)

  1. #include <sys/socket.h>
  2. #include <netinet/in.h> //sockaddr_in
  3. #include <sys/types.h>
  4. #include <string.h> //memset
  5. #include <unistd.h> //close
  6.  
  7. int main(void)
  8. {
  9. struct sockaddr_in address;
  10. memset(&address, 0, sizeof(struct sockaddr_in));
  11.  
  12. int iSocket = socket(AF_INET, SOCK_DGRAM, 0);
  13.  
  14. address.sin_family = AF_INET;
  15. address.sin_port = htons(10314);
  16.  
  17. bind(iSocket, (struct sockaddr*) &address, sizeof(address)); //2e element est une struct sockaddr*
  18.  
  19. close(iSocket);
  20.  
  21. return 0;
  22. }
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS