diff options
author | Don Kjer <don@lindenlab.com> | 2007-05-02 21:24:47 +0000 |
---|---|---|
committer | Don Kjer <don@lindenlab.com> | 2007-05-02 21:24:47 +0000 |
commit | 1c909afe3998778e4cc045c9ab733e8afbf7c25b (patch) | |
tree | 75c00a32a8e305280cbec253195d1113d628fc3e /indra/llmessage/lliosocket.cpp | |
parent | bc59c04653bf1404e8148a8169208b146a123b28 (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.cpp | 15 |
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) |