Se connecter avec
S'enregistrer | Connectez-vous

[C] Problème de Socket UNIX

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte

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. }
Lassé par la pub ? Créez un compte
Tom's guide dans le monde