diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-04-01 18:56:31 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-04-01 18:56:31 +0000 |
commit | 86c2b7abf7f8627c9f765b12ec334d1541dcfb61 (patch) | |
tree | af2950b70648cbed2078c42eb2323b0a3a9e1743 | |
parent | 6953371f7133223ea85e815530320715bae43cc6 (diff) |
Remove call to FlushWriteBuffer from BufferedSocket::Write(), this means we don't try write() pointlessly when we may very well not (chewing CPU), and instead waits for the socketengine to tell us we can write. Tested, works fine. (nothing used this return value anyway)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9247 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/inspsocket.h | 2 | ||||
-rw-r--r-- | src/inspsocket.cpp | 24 | ||||
-rw-r--r-- | src/modules/m_http_client.cpp | 4 | ||||
-rw-r--r-- | src/modules/m_spanningtree/treesocket.h | 2 | ||||
-rw-r--r-- | src/modules/m_spanningtree/treesocket2.cpp | 4 |
5 files changed, 23 insertions, 13 deletions
diff --git a/include/inspsocket.h b/include/inspsocket.h index f094701c0..af93baa56 100644 --- a/include/inspsocket.h +++ b/include/inspsocket.h @@ -332,7 +332,7 @@ class CoreExport BufferedSocket : public EventHandler * returns or linefeeds are appended to the string. * @param data The data to send */ - virtual int Write(const std::string &data); + virtual void Write(const std::string &data); /** * If your socket is a listening socket, when a new diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp index c6fcf8fd6..95d119800 100644 --- a/src/inspsocket.cpp +++ b/src/inspsocket.cpp @@ -434,17 +434,25 @@ const char* BufferedSocket::Read() } } -// There are two possible outcomes to this function. -// It will either write all of the data, or an undefined amount. -// If an undefined amount is written the connection has failed -// and should be aborted. -int BufferedSocket::Write(const std::string &data) +/* + * This function formerly tried to flush write buffer each call. + * While admirable in attempting to get the data out to wherever + * it is going, on a full socket, it's just going to syscall write() and + * EAGAIN constantly, instead of waiting in the SE to know if it can write + * which will chew a bit of CPU. + * + * So, now this function returns void (take note) and just adds to the sendq. + * + * It'll get written at a determinate point when the socketengine tells us it can write. + * -- w00t (april 1, 2008) + */ +void BufferedSocket::Write(const std::string &data) { - /* Try and append the data to the back of the queue, and send it on its way - */ + /* Append the data to the back of the queue ready for writing */ outbuffer.push_back(data); + + /* Mark ourselves as wanting write */ this->Instance->SE->WantWrite(this); - return (!this->FlushWriteBuffer()); } bool BufferedSocket::FlushWriteBuffer() diff --git a/src/modules/m_http_client.cpp b/src/modules/m_http_client.cpp index ef3cf5c33..ef036f3f2 100644 --- a/src/modules/m_http_client.cpp +++ b/src/modules/m_http_client.cpp @@ -292,7 +292,9 @@ bool HTTPSocket::OnConnected() this->status = HTTP_REQSENT; - return this->Write(request); + this->Write(request); + + return true; } bool HTTPSocket::OnDataReady() diff --git a/src/modules/m_spanningtree/treesocket.h b/src/modules/m_spanningtree/treesocket.h index e3c59e4b6..bc5bdc869 100644 --- a/src/modules/m_spanningtree/treesocket.h +++ b/src/modules/m_spanningtree/treesocket.h @@ -266,7 +266,7 @@ class TreeSocket : public BufferedSocket /** Send one or more complete lines down the socket */ - int WriteLine(std::string line); + void WriteLine(std::string line); /** Handle ERROR command */ bool Error(std::deque<std::string> ¶ms); diff --git a/src/modules/m_spanningtree/treesocket2.cpp b/src/modules/m_spanningtree/treesocket2.cpp index 793982ec7..152f9dec3 100644 --- a/src/modules/m_spanningtree/treesocket2.cpp +++ b/src/modules/m_spanningtree/treesocket2.cpp @@ -32,11 +32,11 @@ static std::map<std::string, std::string> warned; /* Server names that have had protocol violation warnings displayed for them */ -int TreeSocket::WriteLine(std::string line) +void TreeSocket::WriteLine(std::string line) { Instance->Logs->Log("m_spanningtree",DEBUG, "S[%d] O %s", this->GetFd(), line.c_str()); line.append("\r\n"); - return this->Write(line); + this->Write(line); } |