- if (*curr->GetWriteError())
- {
- GlobalGoners.AddItem(curr,curr->GetWriteError());
- continue;
+ // It's time to PING this user. Send them a ping.
+ if ((TIME > curr->nping) && (curr->registered == REG_ALL))
+ {
+ // This user didn't answer the last ping, remove them
+ if (!curr->lastping)
+ {
+ /* Everybody loves boobies. */
+ time_t time = this->Time(false) - (curr->nping - curr->pingmax);
+ std::string boobies = "Ping timeout: " + ConvToStr(time) + " second" + (time > 1 ? "s" : "");
+ curr->muted = true;
+ GlobalCulls.AddItem(curr, boobies);
+ curr->lastping = 1;
+ curr->nping = TIME+curr->pingmax;
+ continue;
+ }
+ curr->Write("PING :%s",this->Config->ServerName);
+ curr->lastping = 0;
+ curr->nping = TIME+curr->pingmax;
+ }
+ else
+ {
+ if ((curr->registered == REG_ALL) && (next_call > curr->nping))
+ next_call = curr->nping;
+ }