bool BufferedSocket::Readable()
{
- return ((this->state != I_CONNECTING) && (this->WaitingForWriteEvent == false));
+ return (this->state != I_CONNECTING);
}
BufferedSocket::BufferedSocket(InspIRCd* SI)
this->Timeout = NULL;
this->state = I_DISCONNECTED;
this->fd = -1;
- this->WaitingForWriteEvent = false;
this->Instance = SI;
}
this->fd = newfd;
this->state = I_CONNECTED;
strlcpy(this->IP,ip,MAXBUF);
- this->WaitingForWriteEvent = false;
this->Instance = SI;
if (this->fd > -1)
this->Instance->SE->AddFd(this);
this->fd = -1;
this->Instance = SI;
strlcpy(host,ipaddr.c_str(),MAXBUF);
- this->WaitingForWriteEvent = false;
this->Timeout = NULL;
strlcpy(this->host,ipaddr.c_str(),MAXBUF);
void BufferedSocket::WantWrite()
{
this->Instance->SE->WantWrite(this);
- this->WaitingForWriteEvent = true;
}
void BufferedSocket::SetQueues(int nfd)
Instance->SE->NonBlocking(this->fd);
-#ifdef WIN32
- /* UGH for the LOVE OF ZOMBIE JESUS SOMEONE FIX THIS!!!!!!!!!!! */
- Instance->SE->Blocking(this->fd);
-#endif
-
if (Instance->SE->Connect(this, (sockaddr*)addr, size) == -1)
{
if (errno != EINPROGRESS)
this->Timeout = new SocketTimeout(this->GetFd(), this->Instance, this, timeout_val, this->Instance->Time());
this->Instance->Timers->AddTimer(this->Timeout);
}
-#ifdef WIN32
- /* CRAQ SMOKING STUFF TO BE FIXED */
- Instance->SE->NonBlocking(this->fd);
-#endif
+
this->state = I_CONNECTING;
if (this->fd > -1)
{
// connection.
this->sock->OnTimeout();
this->sock->OnError(I_ERR_TIMEOUT);
- this->sock->timeout = true;
/* NOTE: We must set this AFTER DelFd, as we added
* this socket whilst writeable. This means that we
void BufferedSocket::OnError(BufferedSocketError) { return; }
int BufferedSocket::OnDisconnect() { return 0; }
bool BufferedSocket::OnDataReady() { return true; }
-bool BufferedSocket::OnWriteReady() { return true; }
+bool BufferedSocket::OnWriteReady()
+{
+ // Default behaviour: just try write some.
+ return !this->FlushWriteBuffer();
+}
void BufferedSocket::OnTimeout() { return; }
void BufferedSocket::OnClose() { return; }
}
break;
case EVENT_WRITE:
- if (this->WaitingForWriteEvent)
- {
- this->WaitingForWriteEvent = false;
- if (!this->OnWriteReady())
- {
- if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end())
- this->Instance->SocketCull[this] = this;
- return;
- }
- }
if (this->state == I_CONNECTING)
{
/* This might look wrong as if we should be actually calling
}
else
{
- if (this->FlushWriteBuffer())
+ if (!this->OnWriteReady())
{
if (this->Instance->SocketCull.find(this) == this->Instance->SocketCull.end())
this->Instance->SocketCull[this] = this;