Absturz des Programms bei der Funktion recv
-
Hallo,
ich bin gerade dabei einen IRC Bot zu schreiben.
Doch leider spinnt irgendwie die "recv" Funktion.
Codeausschnitt:char puffer[1024]; int err; for(;;) { memset((char *)puffer,0,sizeof(puffer)); err = recv(socket,puffer,sizeof(puffer),0); if(err == SOCKET_ERROR) { closesocket(socket); return 1; } printf("%s",puffer);Es wird zwar etwas ausgegeben doch dann schließt sich manchmal das Programm oder ich erhalte folgende Fehlermeldung:
http://img25.imageshack.us/my.php?image=errorhkb.jpg
Wenn ich jetzt aber "puffer" vergrößer geht es.
Aber es muss doch auch ne andere möglichkeit geben?
-
Lies nach was recv zurück gibt.
Dann wirst Du feststellen, dass nicht unbedingt ein null terminiertes char array im puffer ist, was bei printf zu problemen führt.
Simon
-
Ok an "printf" liegt es nicht.
"recv()" gibt mir -1 zurück.
Darauf hin habe ich mir mit "WSAGetLastError()" nen Fehlercode ausgeben lassen und der Fehlercode ist:WSAENOTSOCK 10038 Socket operation on nonsocket. An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.Aber des ist irgendwie komisch recv() gibt mir vorher schon was aus und ganz plötzlich gibts da en Fehlercode.
Wie könnte ich den Fehlercode beheben?
-
Ich glaube ich habe den Fehler gefunden:
if (strstr(puffer,"001") == 0 || strstr(puffer,"005") == 0) { strncat(puffer,"JOIN ",strlen("JOIN ")+1); strncat(puffer,channel,strlen(channel)+1); send(socket,puffer,strlen(puffer)+1,0); }Wenn ich diese Überprüfung ausklammere geht es komischer weiße.
Aber wieso?