aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_ident.cpp
diff options
context:
space:
mode:
authorGravatar brain2006-02-02 17:38:04 +0000
committerGravatar brain2006-02-02 17:38:04 +0000
commitb145f922e0571dee3690b6886e59bc6ce7f1fb15 (patch)
tree5c3ce105e763c33e4f82b667462f3fedd8c07d93 /src/modules/m_ident.cpp
parentMore nonblocking dns stuffs (diff)
downloadinspircd++-b145f922e0571dee3690b6886e59bc6ce7f1fb15.tar.gz
inspircd++-b145f922e0571dee3690b6886e59bc6ce7f1fb15.tar.bz2
inspircd++-b145f922e0571dee3690b6886e59bc6ce7f1fb15.zip
When socket fails to construct, we now check the GetState() of the socket object to detect this condition.
If we dont, we can end up leaking fd's and RAM on failure. We dont use exceptions here as these operations can occur very often. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3021 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/modules/m_ident.cpp')
-rw-r--r--src/modules/m_ident.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/modules/m_ident.cpp b/src/modules/m_ident.cpp
index 93fe115a2..2f8ac8283 100644
--- a/src/modules/m_ident.cpp
+++ b/src/modules/m_ident.cpp
@@ -165,8 +165,16 @@ class ModuleIdent : public Module
// Server::AddSocket() call.
Srv->SendServ(user->fd,"NOTICE "+std::string(user->nick)+" :*** Looking up your ident...");
RFC1413* ident = new RFC1413(user, IdentTimeout, Srv);
- user->Extend("ident_data", (char*)ident);
- Srv->AddSocket(ident);
+ if (ident->GetState() != I_ERROR)
+ {
+ user->Extend("ident_data", (char*)ident);
+ Srv->AddSocket(ident);
+ }
+ else
+ {
+ Srv->SendServ(user->fd,"NOTICE "+std::string(user->nick)+" :*** Could not find your ident, using "+std::string(user->ident)+" instead.");
+ delete ident;
+ }
}
virtual bool OnCheckReady(userrec* user)