X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspsocket.cpp;h=6407b213f848bcfd5553019769034593ddbbf4b0;hb=cbb95cffac2fe5533bae8bf5dc2ce62fb0f17c2f;hp=2d967d5e6a43c1c7a3d694404b2c0e858da0b2ad;hpb=b7b0f5404757b0de080d71b92a4b45388276e450;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp index 2d967d5e6..6407b213f 100644 --- a/src/inspsocket.cpp +++ b/src/inspsocket.cpp @@ -91,11 +91,6 @@ BufferedSocket::BufferedSocket(InspIRCd* SI, const std::string &ipaddr, int apor } } -void BufferedSocket::WantWrite() -{ - this->Instance->SE->WantWrite(this); -} - void BufferedSocket::SetQueues() { // attempt to increase socket sendq and recvq as high as its possible @@ -517,54 +512,27 @@ void SocketTimeout::Tick(time_t) this->sock->Timeout = NULL; } -bool BufferedSocket::Poll() +bool BufferedSocket::InternalMarkConnected() { -#ifndef WINDOWS - if (!Instance->SE->BoundsCheckFd(this)) - return false; -#endif - - if (Instance->SE->GetRef(this->fd) != this) - return false; + /* Our socket was in write-state, so delete it and re-add it + * in read-state. + */ + this->SetState(I_CONNECTED); - switch (this->state) + if (this->GetIOHook()) { - case I_CONNECTING: - /* Our socket was in write-state, so delete it and re-add it - * in read-state. - */ -#ifndef WINDOWS - if (this->fd > -1) - { - this->Instance->SE->DelFd(this); - if (!this->Instance->SE->AddFd(this)) - return false; - } -#endif - this->SetState(I_CONNECTED); - - if (this->GetIOHook()) - { - Instance->Logs->Log("SOCKET",DEBUG,"Hook for raw connect"); - try - { - this->GetIOHook()->OnRawSocketConnect(this->fd); - } - catch (CoreException& modexcept) - { - Instance->Logs->Log("SOCKET",DEBUG,"%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason()); - } - } - return this->OnConnected(); - break; - case I_CONNECTED: - /* Process the read event */ - return this->OnDataReady(); - break; - default: - break; + Instance->Logs->Log("SOCKET",DEBUG,"Hook for raw connect"); + try + { + this->GetIOHook()->OnRawSocketConnect(this->fd); + } + catch (CoreException& modexcept) + { + Instance->Logs->Log("SOCKET",DEBUG,"%s threw an exception: %s", modexcept.GetSource(), modexcept.GetReason()); + return false; + } } - return true; + return this->OnConnected(); } void BufferedSocket::SetState(BufferedSocketState s) @@ -604,6 +572,7 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) switch (et) { case EVENT_ERROR: + { switch (errornum) { case ETIMEDOUT: @@ -626,24 +595,27 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) this->Instance->SocketCull[this] = this; return; break; + } case EVENT_READ: - if (!this->Poll()) + { + if (!this->OnDataReady()) { if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end()) this->Instance->SocketCull[this] = this; return; } break; + } case EVENT_WRITE: + { if (this->state == I_CONNECTING) { - /* This might look wrong as if we should be actually calling - * with EVENT_WRITE, but trust me it is correct. There are some - * writeability-state things in the read code, because of how - * BufferedSocket used to work regarding write buffering in previous - * versions of InspIRCd. - Brain - */ - this->HandleEvent(EVENT_READ); + if (!this->InternalMarkConnected()) + { + if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end()) + this->Instance->SocketCull[this] = this; + return; + } return; } else @@ -656,6 +628,7 @@ void BufferedSocket::HandleEvent(EventType et, int errornum) } } break; + } } }