recv() abbrechen wenn nichts zurück kommt



  • moin

    hab da nen kleines problem: ich möchte einen industrie-drucker abfragen bzw ihm sagen das er ein bestimmtes label laden soll.
    hierbei kann es aber vorkommen, das entweder ein rückgabewert kommt oder aber auch eben nicht, das gar nichts zurück kommt.

    nun hab ich als empfangsmethode diese gewählt:

    int ReceiveFromClient(int soc)
    {
    	CAVSCApp* pApp = (CAVSCApp*)AfxGetApp();
        char buffer[1024];
        for (int i = 0; i < sizeof(buffer) - 1; i++){
    		buffer[i]=NULL;
    	}
        pApp->message = "";
        int bytes;
    	CString tmp="";
        do {
            bytes = recv(soc, buffer, sizeof(buffer) - 1, 0);
            // Alles ok
            if (bytes > 0) {   
                // Datenmüll löschen
                buffer[bytes] = '\0';
                for (int i = 0; i < bytes; i++){
    				tmp.Format("%02x ", (unsigned char)buffer[i]);
    				pApp->message += tmp;
    			}
    			pApp->message.TrimRight();
    			//AfxMessageBox("'"+pApp->message+"'");
                return 0;
            }
        }
        while (bytes > 0);
    
        if (bytes == -1) {
           return 1;
        } else if (bytes == 0){
            return 2;
        }else{
            return 0;
        }
    }
    

    hierbei hab ich aber das problem das eben wenn nichts zurück kommt sich mein programm genau bei dem recive verabschiedet.

    wie kann ich das so umprogrammieren, das ich vielleicht vorher nachgucke ob es was zum abholen gibt und wenn net dann lass ich es ansonsten führe ich diese funktion aus?

    mfg LT



  • Deine Socket-API sollte eine select - Funktion zur Verfügung stellen. Für Windows-OSe siehe:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx


Anmelden zum Antworten