(WinAPI) problem mit recv



  • mal wieder ich...

    also... folgendes: habe einen socket bereitgestellt, sowie einen puffer für maximal 100kb, die zu empfangende nachricht hat nur 47kb, also eigentlich kei problem... da es allerdings viele verschiedene nachrichten gibt kann ich die
    grösse dieser nicht vorraussagen (hängt von datenbanken ab)...
    im moment habe ich folgenden code:

    short NET_RecvBuf(SOCKET uSocket, char *msgData)
    {
        short sRetorno = OK;
        long recvLength = 0L;
        long recvComplete = 0L;
    
        // problem: loop only executed once! -> data incomplete!
        do
        {
            recvLength = recv( uSocket, msgData, MAX_LONG_BUFF, 0 );
            if( recvLength < 0 )
                sRetorno = NOOK;
            recvComplete += recvLength;
            if( recvLength<MAX_LONG_BUFF )
                break;
        }while( !sRetorno && (recvComplete<MAX_LONG_BUFF) );
    
        msgData[recvComplete] = '\0';
    
        return (sRetorno);
    }/* end of NET_RecvBuf() */
    

    ja, dass diese schleife maximal einmal ausgeführt wird weiss ich... aber ohne break wartet recv ewig - bzw bis der puffer voll ist... gibts da irgendeine möglichkeit die schleife mehrmals ausführen zu lassen ohne, dass das programm hängt?



  • gibts da irgendeine möglichkeit die schleife mehrmals ausführen zu lassen ohne, dass das programm hängt?

    Vielleicht mit "continue"?



  • gute idee 🙂
    dann läuft halt die schleife ewig, da
    dann recv 0 zurückgibt, sich dadurch der
    counter nicht erhöht und somit die
    schleifenbedinung auf ewig true und seelig bleibt...



  • Guck dir mal die select-Funktion an. Übrigens ist das kein Thema von ANSI-C. Arbeitest du mit Windows (Winsock) oder Unix?



  • wieso kein c problem? handelt sich ja wohl um c code,
    c funktionen...

    der client läuft unter win32, der server ist n oracle db server
    unter keine ahnung welchem os...

    achja... winsock

    [ Dieser Beitrag wurde am 08.07.2003 um 12:57 Uhr von Acid-Sky editiert. ]



  • Es handelt sich aber nicht um ANSI-C Funktionen. Das heißt, dein Programm läßt sich auf den meisten ANSI-C Compilern nichtmal übersetzen. Das stellt kein größeres Problem dar, weil Netzwerkfunktionalität nicht in ANSI-C enthalten ist, du also notgedrungen auf plattformspezifische Erweiterungen ausweichen mußt. Und genau dafür haben wir hier eigene Unterforen. WinAPI, DOS/Konsole und Unix/Linux. Je nachdem, wo du dich zuhause fühlst.



  • ... gut...

    Admin... bitte den Thread verschieben... zu WinAPI...
    wenn ihr mich hier nicht wollt *heul*
    😉


Anmelden zum Antworten