- a->GetUser()->Write("ERROR :Closing link (%s@%s) [%s]", a->GetUser()->ident, a->GetUser()->host, oper_reason.c_str());
- if ((!a->GetUser()->sendq.empty()) && (!(*a->GetUser()->GetWriteError())))
- a->GetUser()->FlushWriteBuf();
- }
-
- if (a->GetUser()->registered == REG_ALL)
- {
- a->GetUser()->PurgeEmptyChannels();
- a->GetUser()->WriteCommonQuit(reason, oper_reason);
- FOREACH_MOD_I(ServerInstance,I_OnUserQuit,OnUserQuit(a->GetUser(), reason));
- }
-
- FOREACH_MOD_I(ServerInstance,I_OnUserDisconnect,OnUserDisconnect(a->GetUser()));
-
- if (IS_LOCAL(a->GetUser()))
- {
- if (ServerInstance->Config->GetIOHook(a->GetUser()->GetPort()))
- {
- try
- {
- ServerInstance->Config->GetIOHook(a->GetUser()->GetPort())->OnRawSocketClose(a->GetUser()->GetFd());
- }
- catch (CoreException& modexcept)
- {
- ServerInstance->Log(DEBUG, "%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason());
- }
- }
-
- ServerInstance->SE->DelFd(a->GetUser());
- a->GetUser()->CloseSocket();
+ LocalUser *u = *a;
+ ServerInstance->SNO->WriteGlobalSno('a', "User %s SendQ exceeds connect class maximum of %lu",
+ u->nick.c_str(), u->MyClass->GetSendqHardMax());
+ ServerInstance->Users->QuitUser(u, "SendQ exceeded");