mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 11:09:04 -04:00
Select is now done, and some debug removed. Not that anyone really should be using select()...
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@5587 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
b8f4ba8214
commit
2a31fe6038
@ -36,6 +36,9 @@ private:
|
||||
/** Because select() does not track an fd list for us between calls, we have one of our own
|
||||
*/
|
||||
std::map<int,int> fds;
|
||||
/** List of writeable ones (WantWrite())
|
||||
*/
|
||||
bool writeable[MAX_DESCRIPTORS];
|
||||
/** The read set and write set, populated before each call to select().
|
||||
*/
|
||||
fd_set wfdset, rfdset;
|
||||
@ -53,6 +56,7 @@ public:
|
||||
virtual bool DelFd(EventHandler* eh);
|
||||
virtual int DispatchEvents();
|
||||
virtual std::string GetName();
|
||||
virtual void WantWrite(EventHandler* eh);
|
||||
};
|
||||
|
||||
/** Creates a SocketEngine
|
||||
|
@ -24,6 +24,7 @@ SelectEngine::SelectEngine(InspIRCd* Instance) : SocketEngine(Instance)
|
||||
ServerInstance->Log(DEBUG,"SelectEngine::SelectEngine()");
|
||||
EngineHandle = 0;
|
||||
CurrentSetSize = 0;
|
||||
memset(writeable, 0, sizeof(writeable));
|
||||
}
|
||||
|
||||
SelectEngine::~SelectEngine()
|
||||
@ -57,6 +58,15 @@ bool SelectEngine::AddFd(EventHandler* eh)
|
||||
return true;
|
||||
}
|
||||
|
||||
void SelectEngine::WantWrite(EventHandler* eh)
|
||||
{
|
||||
int fd = eh->GetFd();
|
||||
|
||||
writeable[fd] = true;
|
||||
|
||||
ServerInstance->Log(DEBUG,"Set %d to writeable", fd);
|
||||
}
|
||||
|
||||
bool SelectEngine::DelFd(EventHandler* eh)
|
||||
{
|
||||
int fd = eh->GetFd();
|
||||
@ -101,14 +111,11 @@ int SelectEngine::DispatchEvents()
|
||||
for (std::map<int,int>::iterator a = fds.begin(); a != fds.end(); a++)
|
||||
{
|
||||
if (ref[a->second]->Readable())
|
||||
{
|
||||
FD_SET (a->second, &rfdset);
|
||||
}
|
||||
else
|
||||
{
|
||||
FD_SET (a->second, &wfdset);
|
||||
}
|
||||
|
||||
if (writeable[a->second])
|
||||
FD_SET (a->second, &wfdset);
|
||||
}
|
||||
tval.tv_sec = 0;
|
||||
tval.tv_usec = 50L;
|
||||
@ -131,8 +138,17 @@ int SelectEngine::DispatchEvents()
|
||||
*/
|
||||
for (int i = 0; i < result; i++)
|
||||
{
|
||||
ServerInstance->Log(DEBUG,"Handle %s event on fd %d",ev[i]->Readable() ? "read" : "write", ev[i]->GetFd());
|
||||
ev[i]->HandleEvent(ev[i]->Readable() ? EVENT_READ : EVENT_WRITE);
|
||||
ServerInstance->Log(DEBUG,"Handle %s event on fd %d",writeable[ev[i]->GetFd()] || !ev[i]->Readable() ? "write" : "read", ev[i]->GetFd());
|
||||
if (writeable[ev[i]->GetFd()])
|
||||
{
|
||||
ev[i]->HandleEvent(EVENT_WRITE);
|
||||
writeable[ev[i]->GetFd()] = false;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
ev[i]->HandleEvent(ev[i]->Readable() ? EVENT_READ : EVENT_WRITE);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -702,7 +702,6 @@ const char* userrec::GetWriteError()
|
||||
|
||||
void userrec::Oper(const std::string &opertype)
|
||||
{
|
||||
this->ServerInstance->SE->WantWrite(this);
|
||||
try
|
||||
{
|
||||
this->modes[UM_OPERATOR] = 1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user