000
15.02.2007, 12:42 Uhr
FrohDoh
|
Hallo,
ich benutze ein async. socket mit folgenden optionen:
C++: |
WSAAsyncSelect(s, g_iohwnd, SOCKET_IO_MESSAGE, (FD_ACCEPT | FD_CONNECT | FD_READ | FD_CLOSE | FD_WRITE));
|
messages werden über das fenster g_iohwnd verarbeitet.
Soweit funktioniert alles bestens, problem gibt es aber bei on recv.
C++: |
status = recv( m_clsocket, (char *)(InputData.m_buffer + InputData.m_buffer_size), RECV_SIZE, 0);
if(status == 0) { Console.ErrorMsg("recv: status = 0, socket closed", status); CloseClient(); return; } else if(status == SOCKET_ERROR) { status = WSAGetLastError(); if(status != WSAEWOULDBLOCK) { Console.ErrorMsg("recv failed: reason %d", status); CloseClient(); return; } else { break; } }
|
das problem genau ist nun: server sendet daten server schließt verbindung socket bekommt FD_READ message socket versucht die daten noch zu lesen aber bemerkt verbindung unterbrochen wird und recv gibt 0 zurück anstatt die daten die ich noch brauche
bei einer schnellen verbindung kommen die daten noch an, bei langsamen verbindungen gibt es probleme .. was kann ich machen um sicherzustellen das ich immer alles empfange was vor dem schließen auch noch gesendet wurde?
danke im vorraus, michael |