diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-03-11 17:47:47 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2006-03-11 17:47:47 +0000 |
commit | ba1d557ee3e1380f5b94f3d6c2aea0984d823213 (patch) | |
tree | 1f397ce02dfed39dcc3d0ca0e845123e340ba984 | |
parent | 381412179424cac7961c31421f2768ef971783db (diff) |
Added method to check if an fd is in the socketengine or not
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3667 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/socketengine.h | 4 | ||||
-rw-r--r-- | src/socket.cpp | 6 | ||||
-rw-r--r-- | src/socketengine.cpp | 7 |
3 files changed, 16 insertions, 1 deletions
diff --git a/include/socketengine.h b/include/socketengine.h index d7a0f1c59..f2679811e 100644 --- a/include/socketengine.h +++ b/include/socketengine.h @@ -131,13 +131,15 @@ public: */ int GetRemainingFds(); - /** Delete a file descriptor f rom the engine + /** Delete a file descriptor from the engine * This function call deletes a file descriptor * from the engine, returning true if it succeeded * and false if it failed. */ bool DelFd(int fd); + bool HasFd(int fd); + /** Waits for an event. * Please note that this doesnt wait long, only * a couple of milliseconds. It returns a list diff --git a/src/socket.cpp b/src/socket.cpp index 508d638cf..23d760002 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -287,6 +287,9 @@ bool InspSocket::FlushWriteBuffer() bool InspSocket::Timeout(time_t current) { + if (!socket_ref[this->fd] || !ServerInstance->SE->HasFd(this->fd)) + return false; + if (((this->state == I_RESOLVING) || (this->state == I_CONNECTING)) && (current > timeout_end)) { log(DEBUG,"Timed out, current=%lu timeout_end=%lu"); @@ -305,6 +308,9 @@ bool InspSocket::Timeout(time_t current) bool InspSocket::Poll() { + if (!socket_ref[this->fd] || !ServerInstance->SE->HasFd(this->fd)) + return true; + int incoming = -1; bool n = true; diff --git a/src/socketengine.cpp b/src/socketengine.cpp index 3df9c2135..bcc8e23af 100644 --- a/src/socketengine.cpp +++ b/src/socketengine.cpp @@ -112,6 +112,13 @@ bool SocketEngine::AddFd(int fd, bool readable, char type) return true; } +bool SocketEngine::HasFd(int fd) +{ + if ((fd < 0) || (fd > MAX_DESCRIPTORS)) + return false; + return (ref[fd] != 0); +} + bool SocketEngine::DelFd(int fd) { log(DEBUG,"SocketEngine::DelFd(%d)",fd); |