Bonjour à vous,
Alors voilà j'ai un Segmentation Fault qui résulte surement du Warning. Sachant que j'ai fait un programme avec Module, donc voilà le main dans un fichier servConf.c, je n'ai rien mis dans le servConf.h.
Code :
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "../Socket/libsck.h"
- int main(int argc,char *argv[])
- {
- int sock_lecture; /* Descripteur de la SOCKET */
- short int port=40;
- sock_lecture=initialisationServeur(&port);
- }
|
Ensuite dans un fichier libsck.c :
Code :
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #include <pthread.h>
- #define MAX_CONNEXIONS 25
- int initialisationServeur(short int *port)
- {
- int df=0;
- struct sockaddr_in adresse;
- int statut;
- socklen_t taille=sizeof adresse;
- // Creation d'une socket
- df=socket(PF_INET,SOCK_STREAM,0);
- if(df<0){
- perror("initialisationServeur.socket" );
- exit(1);
- }
- // On fixe l'adresse de la socket
- adresse.sin_family=AF_INET;
- adresse.sin_addr.s_addr=INADDR_ANY;
- adresse.sin_port=htons(*port);
- statut=bind(df,(struct sockaddr *)&adresse,sizeof(adresse));
- if(statut<0) return -1;
- printf ("adresse fixé \n" );
- // On recupere le numero du port utilise
- statut=getsockname(df,(struct sockaddr *)&adresse,&taille);
- if(statut<0){
- perror("initialisationServeur.getsockname" );
- }
- *port=ntohs(adresse.sin_port);
- printf ("recup num \n" );
- // Initialisation de l'ecoute
- statut=listen(df,MAX_CONNEXIONS);
- if(statut<0) return -1;
- printf ("init ecoute ok\n" );
- return df;
- }
|
Dans le fichier libsck.h j'ai :
Code :
- int initialisationServeur(short int*);
|
Voilà c'est tout, pour la compilation je crée un fichier libsck.a, et ensuite je fais un gcc -o rapido servConf.o ../Socket/libsck.a (tout les fichier sont existants ect)
Au final j'ai un warning : makes integer from pointer without a cast (qui apparait dans le main à la ligne ou il y'a sock_lecture=initialisationServeur(&port)
Et j'ai un segmenation fault dans l'initialisationServeur (quand je met toute les lignes qui utilise port en commentaire le segmentation fault disparait), je suppose que ça vient de là mais je ne comprend pas du tout ...
Bref si quelqu'un sait, je ne suis pas contre un peu d'aide.
Ps : il y'a surement plein d'include qui ne servent à rien, mais en gros j'ai un programme bien plus compliqué que j'ai simplifié au maximum pour essayer de retrouvé l'erreur et il me semble l'avoir localisé à cet endroit.
Une autre question, si j'ai oublié de libérer un File descriptor et que maintenant j'ai l'erreur Errno 98 (already in use) je fais comment pour le libérer ?
Message édité par djaibi86 le 10-05-2008 à 20:15:24