Non blocking recv() (UDP)



  • Hi,

    ich habe folgende Funktion geschrieben um von einem UDP Socket zu lesen (non blocking).

    string readFromSocket() {
    	char buf[BUFSIZE];
    	int iResult = recv(udp_socket,buf,BUFSIZE,0);
    	if ( iResult > 0 ) {
    		printf("Bytes received: %d\n", iResult);
    	}
    	else {
            printf("recv() failed: %d\n", WSAGetLastError());
    	}
    
    	if (WaitForSingleObject(socket_event,0) == WAIT_OBJECT_0) {
    		string str = buf;
    		return str;
    	}
    	return "NO_READ";
    }
    

    Zuvor wird der folgende Code ausgeführt:

    socket_event = WSACreateEvent();
    WSAEventSelect(udp_socket, socket_event, FD_READ);
    

    Das funktioniert auch einigermassen. Das Problem ist,dass der socket_event immer signalisiert ist (sobald eine erstes Paket empfangen wurde) auch wenn keine weiteren Pakete kommen. Somit ist dann auch die Ausgabe (str) etwas komisch (enthaltet viele Leerzeichen und teilweise frühere Pakete)...

    Kann mir einer weiter helfen?

    Danke und Gruss,
    finalcu



  • Nach erfolgreichem lesen WSAResetEvent(..) aufrufen...


Anmelden zum Antworten