Winsock lost connection?
-
Hey!
Wie kann ich herausfinden, ob eine Seite die Verbindung beendet hat?
Per if(recv(...) == 0) funzt es nicht, es wird nämlich, sobald eine Seite schließt, ein buffer voller undefinierter Zeichen gesendet.MfG
-
Besser gesagt empfangen.
-
quatsch
-
Is so.
-
void PacketHandler::receiveThread() { while(!connectionLost) { char buffer[128]; int received = recv(activeSocket, buffer, 128, 0); buffer[received] = '\0'; MessageBox(0, ((std::string)buffer).c_str(), 0, 0); if(received == 0) MessageBox(0, "LOST", 0, 0); data.push_back(buffer); } }LOST wird nie angezeigt, wenn ich eine Seite schließe. Aber eine Wirrwarr-Zeichenkette sehrwohl.
Davor ist aber alles ganz normal, also ich kann korrekt Senden & Empfangen.
-
((std::string)buffer).c_str()What the fuck!
-
Jojo, aber liegts dran?
-
recv @msdn:
If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned.
Und was ist gracefully laut MS? Also ich hab jetzt grade bemerkt, dass -1 zurückgegeben wird, sobald ich eine Seite schließe... In vielen tutorials wird nach 0 abgefragt. Nun gut, ich schließe per "X" das Konsolenfenster...
-
das bedeuted wohl mit close() und nicht einfach durch schließen abgebrochen
-
Mhm ok.
Aber close rufe ich im Destruktor meiner Klasse auf.