WSARcv ruft nicht Callback-Funktion auf



  • Hallo zusammen,

    für eine Kommunikation über TCP/IP möchte ich die "Overlapped socket I/O" Funktion mit einer Callback-Funktion verwenden. WSARecv liefert auch wie beschrieben WSAEWOULDBLOCK als Fehlermeldung
    zurück, doch leider wird die Callback-Funktion nie aufgerufen. Hat jemand eine Ahnung was da schief gehen könnte? Laut Ethereal müsste das Programm Daten empfangen. Im folgenden ist mein Code exemplarisch abgebildet.

    char buf[100];
    WSAOVERLAPPED wsaoverlapped;
    DWORD Flags=0;
    DWORD BytesReceived=0;

    void CALLBACK CompletionROUTINE(
    IN DWORD dwError,
    IN DWORD cbTransferred,
    IN LPWSAOVERLAPPED lpOverlapped,
    IN DWORD dwFlags
    ...
    );

    int Recv()
    {
    int error;

    pwsaoverlapped->Internal=0;
    pwsaoverlapped->InternalHigh=0;
    pwsaoverlapped->Offset=0;
    pwsaoverlapped->OffsetHigh=0;
    Flags=0;
    WSABuf.buf = (char *)buf;
    WSABuf.len = 100;
    error=WSARecv(s,&WSABuf,1,&BytesReceived,&Flags,pwsaoverlapped,CompletionROUTINE);
    if(error==SOCKET_ERROR)
    {
    error=GetLastError();
    if(error==WSAEWOULDBLOCK)
    {
    return 1; // Callback wird aufgerufen
    }
    }
    }


Anmelden zum Antworten