Probleme mit closesocket



  • hallo,

    sobald ich bei RECV als return wert SOCKET_ERROR bekomme
    und ich dannach closesocket mit diesem socket aufrufe
    dann hängt das programm,
    habe es schon debugged er ruft closesocket auf und dann ists aus
    closesocket gibt nichts mehr zurück.

    vielleicht kann mir wer helfen
    danke schon im voraus



  • postet doch mal den code teil..
    Dann werd ich ma schaun



  • CHAR receiveBuffer[0x4000];
    INT recvResult = recv(serverSocket, (LPSTR)receiveBuffer, 0x4000, 0);
    if( recvResult < NULL || recvResult == SOCKET_ERROR )
    {
    	// sondern hängt hier..
    	closesocket(serverSocket);
    
    	// das test erscheint gar nich mehr
    	printf("test");
    }
    else
    {
    	...
    }
    


  • hmm probier doch mal das

    CHAR receiveBuffer[0x4000];
    //Wieso (LPCSTR)
    INT recvResult = recv(serverSocket, receiveBuffer, 0x4000, 0);
    if( recvResult =< NULL || recvResult == SOCKET_ERROR )
    {
        // sondern hängt hier..
        closesocket(serverSocket);
    //Wir wollen ja auch aufräumen
    WSACleanup();   
    
        // das test erscheint gar nich mehr
        printf("test");
    }
    else
    {
        ...
    }
    

    wenn des net geht dann ersetz mal 0x4000 durch ka. 256 und probiers



  • closesocketerror schrieb:

    CHAR receiveBuffer[0x4000];
    INT recvResult = recv(serverSocket, (LPSTR)receiveBuffer, 0x4000, 0);
    if( recvResult < NULL || recvResult == SOCKET_ERROR )
    {
    	// sondern hängt hier..
    	closesocket(serverSocket);
    	
    	// das test erscheint gar nich mehr
    	printf("test");
    }
    else
    {
    	...
    }
    

    1. Wieso "< NULL"? Wenn schon, dann < 0.
    2. Ist dein serverSocket auch gültig?
    3. Was liefert dir WSAGetLastError() vor dem closesocket() Aufruf?



  • das recv serversocket ... wird ca. alle 5sec aufgerufen,
    natürlich wird vorher mittels select überprüft ob datenvorhanden sind.

    der error code ist von WSAGetLastError ist : 10038



  • sry für den doppel post,
    ich habe meinen fehler gefunden.

    das passiert immer nur dann wenn das socket außerhalb des threads genau zwischen:
    Prüfe ob Socket richtig ist und RECV ist wenn es außerhalb genau in dieser spanne also wo es bereits als gültig erklärt wird und nachher geschlossen wird,
    dann kommt dieser fehler

    danke für den tipp @HelpCraft

    nächste mal prüfe ich solche sachen vorher


Anmelden zum Antworten