Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1501 connectés 

  FORUM HardWare.fr
  Programmation
  C

  mini serveur en C: setsockopt() == -1

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mini serveur en C: setsockopt() == -1

n°2206307
monstigule
Posté le 10-10-2013 à 18:41:45  profilanswer
 

Bonjour à tous! :hello:  
je me suis mis à la création d'un mini serveur, non pas pour héberger un site mais pour voir "comment ça fonctionne".
j'ai suivi un code dans un bouquin:
 

Code :
  1. #include "includes.h"
  2. //defines
  3. #define PORT 80
  4. #define WEBROOT "./web-serverX_ROOT/"
  5. int main(void){
  6. int sockfd, new_sockfd, yes=1;
  7. struct sockaddr_in host_addr, client_addr;
  8. socklen_t sin_size;
  9. printf("Accepting web requests on port %d\n", PORT);
  10. if((sockfd == socket(PF_INET, SOCK_STREAM, 0)) == -1)
  11. fatal("in socket" );
  12. if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
  13. fatal("setting socket option SO_REUSEADDR" );
  14. host_addr.sin_family = AF_INET;  // Ordre des octets de l'hôte.
  15. host_addr.sin_port = htons(PORT); // Ordre des octets du réseau (entier court).
  16. host_addr.sin_addr.s_addr = 0;  // Remplir automatiquement l'IP.
  17. memset(&(host_addr.sin_zero), '\0', 8); // Reste de la structure à 0.
  18. if(bind(sockfd, (struct sockaddr *)&host_addr, sizeof(struct sockaddr)) == -1)
  19. fatal("binding to socket" );
  20. if(listen(sockfd, 20) == -1)
  21. fatal("listenning on socket" );
  22. while(1) {  // Boucle d'acceptation des connexions entrantes.
  23. sin_size = sizeof(struct sockaddr_in);
  24. new_sockfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size);
  25. if(new_sockfd == -1)
  26.  fatal("accepting connection" );
  27. handle_connection(new_sockfd, &client_addr);
  28. }
  29. return 0;
  30. }


 
mais lors de l'éxécution, voici ce que me donne le terminal Linux:

Code :
  1. monstigule@monstigule-PC:~/Server$ gcc main.c
  2. monstigule@monstigule-PC:~/Server$ ./a.out
  3. Accepting web requests on port 80
  4. Error: setting socket option SO_REUSEADDR
  5. monstigule@monstigule-PC:~/Server$


 
j'en conclus donc que  

Code :
  1. setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int))

retourne la valeur -1.
mais pourquoi? je n'arrive pas à trouver la solution... :pt1cable:  
 
merci d'avance  :)

mood
Publicité
Posté le 10-10-2013 à 18:41:45  profilanswer
 

n°2206314
tpierron
Posté le 10-10-2013 à 20:05:20  profilanswer
 

monstigule a écrit :

Code :
  1. printf("Accepting web requests on port %d\n", PORT);
  2. if((sockfd == socket(PF_INET, SOCK_STREAM, 0)) == -1)
  3. fatal("in socket" );




 
Ha, ha, d'habitude on confond "=" à la place de "==". Toi, tu viens de faire l'inverse.

n°2206321
monstigule
Posté le 10-10-2013 à 20:48:49  profilanswer
 

tpierron a écrit :


 
Ha, ha, d'habitude on confond "=" à la place de "==". Toi, tu viens de faire l'inverse.


 
oui exact c'est evident merci :)
 
maintenant j'ai l'erreur

Code :
  1. Error: binding to socket


...
 
merci de ta réponse :)

n°2206343
tpierron
Posté le 10-10-2013 à 21:55:52  profilanswer
 

Les ports < 1024 nécessite les droits administrateur pour être ouvert en écoute. Utilise la fonction perror() au lieu de fatal(), si tu as une réponse du genre "permission denied", c'est à cause de ça.
 
Bref utilise un autre port, du genre 8080.

n°2206368
monstigule
Posté le 11-10-2013 à 08:27:36  profilanswer
 

ah merci j'ai regardé la suite du bouquin, il fallait utiliser:
gcc -o main main.c
sudo chown root ./main
sudo chmod u+s ./main
puis ./main
 
bref oui il fallait le lancer en admin
merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  mini serveur en C: setsockopt() == -1

 

Sujets relatifs
Langage C - Pointeurs (Quelques explications)[C] Comment sauvegarder lors d'un remplissage de fichier?
Inversion de matrices en C[C=débutant] Boucle While
Débutant en C...Comment générer un nombre aléatoire en C++ ?
Configurer les registres d'un PIC18F en CResoudre une equation du second degre en C (suite)
Besoin d'idée coulée faire le code source en C + +Blocage de mon Serveur de tchat (AcceptTcpClient)
Plus de sujets relatifs à : mini serveur en C: setsockopt() == -1


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR