summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/inspsocket.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp
index 2ddc3cf75..c7e68df6c 100644
--- a/src/inspsocket.cpp
+++ b/src/inspsocket.cpp
@@ -334,15 +334,21 @@ bool InspSocket::FlushWriteBuffer()
errno = 0;
if ((this->fd > -1) && (this->state == I_CONNECTED))
{
+ /* If we have multiple lines, try to send them all,
+ * not just the first one -- Brain
+ */
while (outbuffer.size() && (errno != EAGAIN))
{
+ /* Send a line */
int result = write(this->fd,outbuffer[0].c_str(),outbuffer[0].length());
if (result > 0)
{
if ((unsigned int)result == outbuffer[0].length())
{
/* The whole block was written (usually a line)
- * Pop the block off the front of the queue
+ * Pop the block off the front of the queue,
+ * dont set errno, because we are clear of errors
+ * and want to try and write the next block too.
*/
outbuffer.pop_front();
}
@@ -350,6 +356,12 @@ bool InspSocket::FlushWriteBuffer()
{
std::string temp = outbuffer[0].substr(result);
outbuffer[0] = temp;
+ /* We didnt get the whole line out. arses.
+ * Try again next time, i guess. Set errno,
+ * because we shouldnt be writing any more now,
+ * until the socketengine says its safe to do so.
+ */
+ errno = EAGAIN;
}
}
else if ((result == -1) && (errno != EAGAIN))