Bonjour, voila enfaite je suis sous devc++ et je code un service irc et je sais pas ce qui se passe, de temp en temp window m'envoy une erreur comme koi
ya une erreur dans mon programme et qui faut le fermer, alors que pendant 30 mins je l'utilise et j'ai aucun probléme mais au moment ou je mis attend pas il se cré une erreur.
/*
/* J'initialise ma socket */
WSADATA WSAData; /* Pour win seulement */
WSAStartup(MAKEWORD(2,0), &WSAData);
/* Je construit ma socket */
SOCKET sock;
SOCKADDR_IN sin;
char buffer[4096];
char *ptr;
char msg[256];
char bp[512];
int i;
sock = socket(AF_INET,SOCK_STREAM,0);
sin.sin_addr.s_addr = inet_addr(servip);
sin.sin_family = AF_INET;
sin.sin_port = htons(servport);
int Fin;
char tmpData[1024+1];
buffer[0] = 0;
while(1)
{
Fin = recv(sock, tmpData, 1024, 0);
if (Fin > 0)
{
tmpData[Fin] = 0;
if (Fin + strlen(buffer) < 4096)
strcat(buffer, tmpData);
Donnetraitement(buffer, sock);
}
else
break;
}
}
void Donnetraitement(char *buffer, int sock)
{
char *ptr;
char msg[500];
int Pos = strstr(buffer, "\r\n") - buffer;
char Ligne[2048];
if (Pos < 0)
return;
if (Pos > 2048)
{
ZeroMemory(buffer, 4096); //Tout détruires
return;
}
do
{
CopyMemory(Ligne,buffer, Pos);
Ligne[Pos] = 0;
int x = 0;
int z = 1;
int y = 0;
int u = 0;
char mot[1000] = {};
char mot2[1000] = {};
char mot3[1000] = {};
char mot4[1000] = {};
char mot5[1000] = {};
char mot6[1000] = {};
char mot7[1000] = {};
char autre[1];
while(Ligne[x] != '\0')
{
if (Ligne[x] == ':' && z == 1) {x++;}
autre[y]=Ligne[x];
x++;
if (strpbrk(autre, " ") == NULL)
{
if (z == 1) { strncat(mot, autre,1); }
if (z == 2) { strncat(mot2, autre,1); }
if (z == 3) { strncat(mot3, autre,1); }
if (z == 4) { strncat(mot4, autre,1); }
if (z == 5) { strncat(mot5, autre,1); }
if (z == 6) { strncat(mot6, autre,1); }
if (z == 7) { strncat(mot7, autre,1); }
}
if (strpbrk(autre, " ") != NULL) { z++; }
}
printf("%s\n",Ligne);
autre[y]=mot3[0];
if (strstr(buffer, "PING :"))
{
ptr = strstr(Ligne, "PING :") + strlen("PING :");
snprintf(msg, 256, "PONG :%s\n", ptr);
send(sock, msg, strlen(msg), 0);
}
if (strcmp(mot2,"PRIVMSG") == 0) {
if (strcmp(autre,"#") > 0) {
msgbuffer(Ligne, sock, mot, mot2, mot3, mot4, mot5, mot6);
}
if (strcmp(autre,"#") == 0) { printf("Ici message sur les canaux => Voir sur le CS\n"); return; }
}
if (strcmp(mot2,"EOS") == 0) {
sprintf (Ligne, ":%s GLOBOPS Syncronisation au server terminée \r\n",csnick);
send (sock, Ligne, strlen (Ligne), 0);
}
if (strcmp(mot,"NICK") == 0) {
sprintf (Ligne, ":%s PRIVMSG #sphere :NicK Connecté (%s) depuis [%s@%s] sur le server %s \r\n",csnick,mot2,mot5,mot6,mot7);
send (sock, Ligne, strlen (Ligne), 0);
}
if (strcmp(mot2,"QUIT") == 0) {
sprintf (Ligne, ":%s PRIVMSG #sphere :NicK Déconnecté (%s) \r\n",csnick,mot);
send (sock, Ligne, strlen (Ligne), 0);
}
strcpy(buffer, buffer + Pos + 2); //Éliminer la ligne
Pos = strstr(buffer, "\r\n") - buffer;
}
while (Pos >= 0 && Pos <= 1024);
}
Vous avez une idée?