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?


Anmelden zum Antworten