recv lässt das Programm crashen, wenn der Client nichts sendet



  • Hallo liebe Leute,

    ich benutze folgenden Beispiel Code, welcher auch einwandfrei funktioniert.
    Wenn ich jetzt aber im Client den Teil auskommentiere, in dem an den Server gesendet wird, crashed eben jener...
    Ich bin jetzt schon seit Stunden am suchen warum.

    Das Programm bricht an folgender Stelle

    int status = ::recv (m_sock, buf, MAX_RECV, 0);
    

    in der Methode in der Datei Socket.cpp

    int Socket::recv (std::string &s) const
    

    mit der Meldung

    terminate called after throwing an instance of 'char const*'
    Aborted (core dumped)
    

    Wenn ich gdb mitlaufen lasse, spuckt er folgendes aus

    Starting program: /pfad/a.out 
    terminate called after throwing an instance of 'char const*'
    
    Program received signal SIGABRT, Aborted.
    0x00007ffff752ff77 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
    56	../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
    

    Ich hoffe ihr könnt mir helfen, danke schon mal!



  • Es tritt bei dir eine Exception auf die in Form eines C-Strings geworfen wird. Fang sie mal ab mit sowas wie:

    try
    {
        // Code hier
    }
    catch (char const * exeption )
    {
        std::cout << exeption << std::endl;
    }
    

    Dann solltest du sehen was genau der Fehler ist 😉
    Und das wird vermutlich diese Stelle sein:

    throw SocketException ( "Could not read from socket." );
    


  • Oh man... zum Haare ausraufen. 🙂
    War wohl gestern ein wenig übermüdet.

    Habe anstatt

    throw SocketException ("Could not receive from socket");
    

    folgendes stehen gehabt.

    throw ("Could not receive from socket");
    

    Ich habe nur SocketExceptions abgefangen, ergo ist die char const* Exception ins Leere gegangen.

    Danke


Anmelden zum Antworten