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
}
}
}