NetSendToAll(buffer);
}
+ user->FlushWriteBuf();
+
FOREACH_MOD OnUserDisconnect(user);
if (user->fd > -1)
shutdown(user->fd,2);
close(user->fd);
}
-
- if (user->registered == 7) {
- WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason);
- AddWhoWas(user);
- }
+ // this must come before the WriteOpers so that it doesnt try to fill their buffer with anything
+ // if they were an oper with +s.
if (user->registered == 7) {
purge_empty_chans(user);
- }
+ WriteOpers("*** Client exiting: %s!%s@%s [%s]",user->nick,user->ident,user->host,reason);
+ AddWhoWas(user);
+ }
if (iter != clientlist.end())
{
Write(user->fd,"ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,reason);
log(DEBUG,"closing fd %lu",(unsigned long)user->fd);
+ user->FlushWriteBuf();
+
if (user->registered == 7) {
FOREACH_MOD OnUserQuit(user);
WriteCommonExcept(user,"QUIT :%s",reason);
bool LoadModule(const char* filename)
{
char modfile[MAXBUF];
+#ifdef STATIC_LINK
+ snprintf(modfile,MAXBUF,"%s",filename);
+#else
snprintf(modfile,MAXBUF,"%s/%s",ModPath,filename);
+#endif
std::string filename_str = filename;
+#ifndef STATIC_LINK
if (!DirValid(modfile))
{
log(DEFAULT,"Module %s is not within the modules directory.",modfile);
snprintf(MODERR,MAXBUF,"Module %s is not within the modules directory.",modfile);
return false;
}
+#endif
log(DEBUG,"Loading module: %s",modfile);
+#ifndef STATIC_LINK
if (FileExists(modfile))
{
+#endif
for (int j = 0; j < module_names.size(); j++)
{
if (module_names[j] == filename_str)
snprintf(MODERR,MAXBUF,"Factory function failed!");
return false;
}
+#ifndef STATIC_LINK
}
else
{
snprintf(MODERR,MAXBUF,"Module file could not be found");
return false;
}
+#endif
MODCOUNT++;
return true;
}
}
tvs.tv_usec = 30000L;
tvs.tv_sec = 0;
-#ifdef IS_SOLARIS
- int servresult = select(1024, &serverfds, NULL, NULL, &tvs);
-#else
- int servresult = select(32767, &serverfds, NULL, NULL, &tvs);
-#endif
+ int servresult = select(FD_SETSIZE, &serverfds, NULL, NULL, &tvs);
if (servresult > 0)
{
for (int x = 0; x != SERVERportCount; x++)
#ifdef USE_SELECT
tval.tv_sec = 0;
tval.tv_usec = 1000L;
-#ifdef IS_SOLARIS
- selectResult2 = select(1024, &sfd, NULL, NULL, &tval);
-#else
- selectResult2 = select(65535, &sfd, NULL, NULL, &tval);
-#endif
-
+ selectResult2 = select(FD_SETSIZE, &sfd, NULL, NULL, &tval);
// now loop through all of the items in this pool if any are waiting
if ((selectResult2 > 0) && (xcount != clientlist.end()))
for (user_hash::iterator count2a = xcount; count2a != endingiter; count2a++)
}
}
-#ifndef IS_SOLARIS
- if ((currfd < 0) || (!fd_ref_table[currfd]))
-#endif
- goto label;
+ goto label;
}
if ((result == -1) && (errno != EAGAIN) && (errno != EINTR))