C++ IRC Bot beendet sich einfach
-
hi,
ich hab mir mal einen irc bot in vc++ 6 unter win xp geschrieben, der auch tadellos funktioniert, d.h. er connected zu nem server, reagiert problemlos auf eingaben und gibt sämtlichen meldungen vom server bzw von anderen benutzern in der konsole aus. das problem ist bloß, dass er sich nach ein oder zwei stunden plötzlich beendet. dazu erstmal der relevante teil des codes:[...] int main() { [...] bool conn=1; while(conn) { memset(buf,'\0',BUFSIZE); rc=recv(s,buf,BUFSIZE,0); stringstream ss(buf); while(getline(ss,str)) parseInput(str); } } cout << "bot shutdown..."; return 0; }
zur erklärung:
der inhalt des vom servers empfangenen arrays buf wird in einen string stream geschrieben, damit ich den inhalt zeilenweise auslesen kann... sicher nicht sehr elegant, aber mir fiel für den anfang nichts besseres ein.
komisch finde ich bloß, dass ich, wenn sich der bot plötzlich beendet, keinerlei fehler meldungen erhalte, trotzdem beendet er sich nicht normal über das return aus main, da er das "bot shutdown" vorher nicht ausgibt.
kann mir da jemand weiterhelfen?
danke schonmal...
-
Hi
Hmm aus deinen angaben is wenig was ich heraus lesen kann, kenn mich sonst aber ein bisschen mit irc aus (hab mal nen irc-client geschrieben)
Lies dir mal die irc rfc durch. da steht sicher iregenwo wie oft man ping-pong mit den server machen muss.
es kann auch etwas total anderes sehen. also wäre es schön wenn du dass debusggst und schaust welchen befehl du als letzters weg schickst bzw. bekommst
mfg
-
an das mit den pings hab ich schon gedacht, er antwortet darauf automatisch mit einem pong. außerdem kann der fehler hier nicht liegen, da ich im irc client sonst meinen bot mit der quit meldung ping timeout sehen würde, anstatt von "Read error: Connection reset by peer".
-
SithLord schrieb:
[...] int main() { [...] bool conn=1; while(conn) { memset(buf,'\0',BUFSIZE); rc=recv(s,buf,BUFSIZE,0); stringstream ss(buf); while(getline(ss,str)) parseInput(str); } } cout << "bot shutdown..."; return 0; }
es kann vorkommen, dass buf nich '\0' terminiert ist.
vielleicht liegts ja daran?
-
danke für die tipps, ich glaub an der sache mit dem nicht null terminierten array könnte es liegen... ich hab jetzt recv so eingestellt, dass es nur BUFSIZE-1 zeichen einliest.. ich hoffe es geht dann.