Comment 11 for bug 1400339

Revision history for this message
Trebxson (trebxson) wrote :

> aaahh
> SERVER: Reserved slot 3 freed due to ping timeout
> Receiving Message from server failed
> client forced to stop

Ping? Pong!

Bitte einbauen und ausliefern. :) (Vielen Dank für die nette Falle :))

GameProtocol.h
---
     NP_LOCAL
 };

 // Wie lange maximal warten, bis Rausschmiss des Spielers
-const unsigned PING_TIMEOUT = 30000;
+const unsigned PING_TIMEOUT = 300000; // mind. 60

 // Ziele fürs Chatten (Ingame)
 enum ChatDestination

---

Habe aufs erwürgen setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, ...) (#7) vor und hinter jede erdenkliche Stelle mit 3..300s eingesetzt, ohne, dass es irgendwas am Timeout/Verhalten änderte. Folglich habe ich heute die GameClient::Run() und dazu die Logzeilen etwas beobachtet.
Die Logzeilen sagen einem: nicht der Client bricht ab, sondern der Server. Server lädt Karte, Client verbindet Client lädt Karte, Client braucht zu lange -> rausschmiss.

Jeder der "aaahh" und "SERVER: Reserved slot 3 freed due to ping timeout" gesehen hat und den Code kennt, hätte in Nanosekunden auf PING_TIMEOUT=30 kommen müssen, da die Zeilen keine 2 Zeilen auseinander stehen.

void GameServerPlayer::doTimeout()
{
     if( (ps == PS_RESERVED) && ( ( VideoDriverWrapper::inst().GetTickCount() - connecttime ) > PING_TIMEOUT ) )
    {
        puts("aaahh");
        LOG.lprintf("SERVER: Reserved slot %d freed due to ping timeout\n", playerid);
...

Wieso diese Abstandshaltung? Ich finde es schade, dass Spikes Arbeiten nicht in der Form unterstützt werden, wie es eigentlich für S25 notwendig wäre (http://www.siedler25.org/index.php?com=forum&mod=forum&action=thread&id=1154&start=1).