kranagard a écrit :
Bonjours, je sais que ce message d'erreur est assez redondant et qu'on trouve beaucoup de postes sur le sujet mais apres avoir lu, relue et revérifié mon code je ne vois vraiment pas d'où ça vient.
il s'agit d'un échange de messages entre client et serveur, ceux-ci ayant les mêmes sockets (une classe qui utilise directement les fonctions recv/ send...)
la connexion se passe bien, des premiers messages circulent sur le réseau sans soucis et d'un coups j'ai cette erreur. voici un bout de code précédant celle ci (entre l'allocation et le free en fait)
Code :
- char* mSocket::Read(int& taille)
- {
- int val;
- if((val = recv(sock,&taille,sizeof(int),0))==-1)
- throw new ExceptionServeur(string(strerror(errno)));
- else if(val == 0)
- throw new ExceptionServeur("fermeture du client detectee" );
- char *bArray = NULL;
- bArray = new char(taille+1);
- memset(bArray,0,taille+1);
- if((val = recv(sock,bArray,taille,0))==-1)
- throw new ExceptionServeur(string(strerror(errno)));
- return bArray;
- }
|
Code :
- char* reponse = NULL;
- reponse = socket->Read(taille);
- if(strncmp(reponse,"ACK",3)==0)
- {
- free(reponse);
- reponse = socket->Read(taille);
- string rep(reponse);
- free(reponse);
- *ret = parseCVS(rep);
- }
|
la socket récupère 4 octets en premier, un int contenant la taille du message qui arrive. puis alloue la bonne taille pour réceptionner le message.
enfin voila, ça fait un moment que je me prends la tête la dessus donc si quelqu'un a une idée je suis vraiment preneur...
se trouve en tête de mon bout de code la réception et le free de la réception d'un message précédant, celui ci contenant un ACK applicatif. de plus si je commente le free() qui plante l'appelle suivant d'un read plante avec la même erreur.
un signal est aussi émit (selon linux qui me l'affiche dans l'indicateur de message): SIGABRT
|