-
Wenn du nicht den ganzen Code posten willst kann ich dir nur pauschal sagen, alles Debuggen, Rückgabewerte prüfen etc.
Wenn man WSAGetLastError() und auch GetLastError() nicht richtig zu benützen weiss, kommt man schon mal auf die falsche Fährte.
Bsp.
...
...
l = recv(..,..,..,...);
printf_s("%i\n",WSAGetLastError());
...
...
Du kannst hier nicht sagen oder wissen das dir WSAGetLastError() den Fehler von recv() liefert! Denn du weisst ja nicht ob auch wirklich die recv() fehlgeschlagen ist (ausser Du testest ob recv() dir SOCKET_ERROR oder 0 zurückgibt!, und dann kannst du WSAGetLastError() aufrufen um dir den spezifischen fehler auszugeben). Aber sonnst konnte ja WSAGetLastError() ein errorcode von einem anderen Aufruf der fehlgeschlagen ist zurück geben! Also da immer aufpassen.
Gleich ist es mit GetLastError().
Deshalb sollte man auch zum testen immer nur WSAGetLastError() in zusammenhang mit dem return Code der letzten Funktion benützen.
Also:
...
...
l = recv(..,..,..,...); // Obwohl man hier recv() noch in einer Schleife aufrufen müsste.
if(l == SOCKET_ERROR) {
printf_s("%i\n",WSAGetLastError());
return 1;
}
...
...
Für ein erfahrenen Programmierer sicher klar. Doch für ein Anfänger manchmal sehr irreführend.