IRC-Bot - Reconnectproblem
-
Hi...
Ich hab einen kleinen IRC-Bot gebaut das Problem ist jetzt das ich hinter einem Router sitzte und bei einer Trennung
spätestens nach 24h der Bot aus dem IRC fliegt.
Wär es möglich das irgendwie zu prüfen vlt. an der Ausgabe wenn die 1 Minute oder so unverändert bleibt !?
Leider hab ich keinen blassen Schimmer wie ich das anstellen soll.
Hier mal bisschen Code wies bis jetzt ausschaut:do { if (WSAGetLastError() != 0 && WSAGetLastError() != 10053 && WSAGetLastError() != 183) { // Winsock rc = socketfkt.startWinsock(); s=socket(AF_INET,SOCK_STREAM,0); memset(&addr, 0, sizeof(addr)); addr.sin_family=AF_INET; addr.sin_port=htons(IRC.port); rc = socketfkt.getAddrFromString((char*)IRC.server.c_str(), &addr); rc = connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); ......... } else { ofstream logdat("log.dat", ios_base::app); Ausgabe = IRC.Serverrueckgaben(s, rc); cout << Ausgabe << endl; logdat << Ausgabe << flush; ........ } }while(Leave != true);Das unwichtige hab ich mal rausgeschnitten :-).
Wenn mir einer helfen könnte wäre ich sehr Dankbar, am besten mit bisschen Code zum besseren Verständniss.Vielen Dank schonmal für die Hilfe
mfg
Tomjack
-
Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
recv() sollte fehlschlagen wenn ich dich jetzt richtig verstanden hab
-
Schon, aber nach welcher Zeit?

Normalerweise schickt der IRC-Server in regelmäßigen Abständen eine PING-Nachricht. Du könntest darauf aufbauend ein Timeout implementieren. Manche Clients schicken auch selber PINGs an den Server.
-
Sry das ich erst so spät drauf antworte hatte zu tun.
Ich versteh net ganz was du meinst Bashar.Das der IRC-Server mir Ping schickt weiss ich und das ich dann nen Pong zurückschicken muss ist mir auch klar.
if((Ausgabe.find("PING :",0)) != string::npos ) IRC.Pingpong(s, Ausgabe, (pingpos+6));Das funktioniert auch alles.
Ich hab auch falls ich mal nen Ping timeout habe eine ERROR-Funktionif ((Ausgabe.substr(0, 5)) == "ERROR") WSASetLastError(1);Der ERROR kommt aber nur wenn ich noch connectet bin.
Wenn jetzt aber meine 24 Stunden abgelaufen sind und ich reconnecten muss bzw. mein Router reconnecten muss, dann merkt das mein Programm net und läuft ewig in der while() Schleife weiter.
Ich weiss net was ich tun soll damit er das peilt das er nixmehr bekommt und automatisch reconnectet.
Ich kann auch leider mit der Antwort von fatbot net viel Anfangen sry