Alles klar, danke habe da wohl einfach drüber hinweg gelesen.
Bei mir ist der Rückgabewert allerdings 0, sprich die Socket Verbindung wird "gracefully closed" (was auch immer das heißt).
Jetzt stelle ich mir die Frage, wieso der Socket geschlossen wird bzw. was da eigentlich passiert, denn wenn noch eine Nachricht an meinen "Server" gesendet wird, kann er diese immer noch empfangen, was bei einem geschlossenen Socket eigentlich nicht gehen sollte.
€dit:
Okay habe folgende Aussage gefunden:
Anders als bei recv deutet ein Rückgabewert von 0 nicht auf das
Beenden einer Verbindung hin! Es handelt sich um ein völlig
legitimes, leeres Paket.
Das kann aber nicht stimmen, da die Nachricht ankommt !?
€dit2:
Es liegt wohl hierran:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
int DatagramSocket::recvfrom(char* buf, int length, SOCKADDR_IN *from) {
int fromlen = sizeof(*from);
int result;
if (result = ::recvfrom(s,buf, length, 0, (sockaddr *)from,&fromlen) == SOCKET_ERROR) {
cout << WSAGetLastError();
throw IOException("Fehler beim Empfang. Error: ");
}
return result;
}
|
Wieso funktioniert die Zuweisung im if nicht? Dachte sowas würde gehen!?