* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
* E-mail:
* <brain@chatspike.net>
* <Craig@chatspike.net>
#include "helperfuncs.h"
#include "socketengine.h"
-extern SocketEngine* SE;
-extern int boundPortCount;
-extern int openSockfd[MAXSOCKS];
+extern InspIRCd* ServerInstance;
extern time_t TIME;
-InspSocket* socket_ref[65535];
+InspSocket* socket_ref[MAX_DESCRIPTORS];
InspSocket::InspSocket()
{
this->fd = newfd;
this->state = I_CONNECTED;
this->IP = ip;
- SE->AddFd(this->fd,true,X_ESTAB_MODULE);
+ ServerInstance->SE->AddFd(this->fd,true,X_ESTAB_MODULE);
socket_ref[this->fd] = this;
}
else
{
this->state = I_LISTENING;
- SE->AddFd(this->fd,true,X_ESTAB_MODULE);
+ ServerInstance->SE->AddFd(this->fd,true,X_ESTAB_MODULE);
socket_ref[this->fd] = this;
log(DEBUG,"New socket now in I_LISTENING state");
return;
}
}
this->state = I_CONNECTING;
- SE->AddFd(this->fd,false,X_ESTAB_MODULE);
+ ServerInstance->SE->AddFd(this->fd,false,X_ESTAB_MODULE);
socket_ref[this->fd] = this;
return;
}
}
else
{
- log(DEBUG,"EOF or error on socket");
- return NULL;
+ if (n == EAGAIN)
+ {
+ return "";
+ }
+ else
+ {
+ log(DEBUG,"EOF or error on socket");
+ return NULL;
+ }
}
}
{
this->Buffer = this->Buffer + data;
this->FlushWriteBuffer();
+ return data.length();
}
void InspSocket::FlushWriteBuffer()
int result = 0;
if (this->Buffer.length())
{
- result = send(this->fd,this->Buffer,this->Buffer.length(),0);
+ result = send(this->fd,this->Buffer.c_str(),this->Buffer.length(),0);
if (result > 0)
{
/* If we wrote some, advance the buffer forwards */
/* Our socket was in write-state, so delete it and re-add it
* in read-state.
*/
- SE->DelFd(this->fd);
- SE->AddFd(this->fd,true,X_ESTAB_MODULE);
+ ServerInstance->SE->DelFd(this->fd);
+ ServerInstance->SE->AddFd(this->fd,true,X_ESTAB_MODULE);
return this->OnConnected();
break;
case I_LISTENING:
break;
}
+ if (this->Buffer.length())
+ this->FlushWriteBuffer();
+
return true;
}
this->Close();
}
-/*
-int BindSocket (int sockfd, struct sockaddr_in client, struct sockaddr_in server, int port, char* addr)
-int OpenTCPSocket (void)
-*/