summaryrefslogtreecommitdiff
path: root/indra/llmessage/lliosocket.cpp
diff options
context:
space:
mode:
authorDon Kjer <don@lindenlab.com>2007-05-02 21:24:47 +0000
committerDon Kjer <don@lindenlab.com>2007-05-02 21:24:47 +0000
commit1c909afe3998778e4cc045c9ab733e8afbf7c25b (patch)
tree75c00a32a8e305280cbec253195d1113d628fc3e /indra/llmessage/lliosocket.cpp
parentbc59c04653bf1404e8148a8169208b146a123b28 (diff)
svn merge -r 60342:61148 svn+ssh://svn/svn/linden/branches/maintenance into release
Diffstat (limited to 'indra/llmessage/lliosocket.cpp')
-rw-r--r--indra/llmessage/lliosocket.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp
index 7c33153086..6ccaa7fb1a 100644
--- a/indra/llmessage/lliosocket.cpp
+++ b/indra/llmessage/lliosocket.cpp
@@ -403,23 +403,35 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
bool done = false;
while(it != end)
{
+
PUMP_DEBUG;
if((*it).isOnChannel(channels.in()))
{
PUMP_DEBUG;
// *FIX: check return code - sockets will fail (broken, etc.)
len = (apr_size_t)segment.size();
- apr_socket_send(
+ apr_status_t status = apr_socket_send(
mDestination->getSocket(),
(const char*)segment.data(),
&len);
+ // We sometimes get a 'non-blocking socket operation could not be
+ // completed immediately' error from apr_socket_send. In this
+ // case we break and the data will be sent the next time the chain
+ // is pumped.
+#if LL_WINDOWS
+ if (status == 730035)
+ break;
+#endif
mLastWritten = segment.data() + len - 1;
+
PUMP_DEBUG;
if((S32)len < segment.size())
{
break;
}
+
}
+
++it;
if(it != end)
{
@@ -429,6 +441,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
{
done = true;
}
+
}
PUMP_DEBUG;
if(done && eos)