aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llmessage/lliosocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/indra/llmessage/lliosocket.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/linden/indra/llmessage/lliosocket.cpp b/linden/indra/llmessage/lliosocket.cpp
index af22180..0ceb436 100644
--- a/linden/indra/llmessage/lliosocket.cpp
+++ b/linden/indra/llmessage/lliosocket.cpp
@@ -423,23 +423,35 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
423 bool done = false; 423 bool done = false;
424 while(it != end) 424 while(it != end)
425 { 425 {
426
426 PUMP_DEBUG; 427 PUMP_DEBUG;
427 if((*it).isOnChannel(channels.in())) 428 if((*it).isOnChannel(channels.in()))
428 { 429 {
429 PUMP_DEBUG; 430 PUMP_DEBUG;
430 // *FIX: check return code - sockets will fail (broken, etc.) 431 // *FIX: check return code - sockets will fail (broken, etc.)
431 len = (apr_size_t)segment.size(); 432 len = (apr_size_t)segment.size();
432 apr_socket_send( 433 apr_status_t status = apr_socket_send(
433 mDestination->getSocket(), 434 mDestination->getSocket(),
434 (const char*)segment.data(), 435 (const char*)segment.data(),
435 &len); 436 &len);
437 // We sometimes get a 'non-blocking socket operation could not be
438 // completed immediately' error from apr_socket_send. In this
439 // case we break and the data will be sent the next time the chain
440 // is pumped.
441#if LL_WINDOWS
442 if (status == 730035)
443 break;
444#endif
436 mLastWritten = segment.data() + len - 1; 445 mLastWritten = segment.data() + len - 1;
446
437 PUMP_DEBUG; 447 PUMP_DEBUG;
438 if((S32)len < segment.size()) 448 if((S32)len < segment.size())
439 { 449 {
440 break; 450 break;
441 } 451 }
452
442 } 453 }
454
443 ++it; 455 ++it;
444 if(it != end) 456 if(it != end)
445 { 457 {
@@ -449,6 +461,7 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
449 { 461 {
450 done = true; 462 done = true;
451 } 463 }
464
452 } 465 }
453 PUMP_DEBUG; 466 PUMP_DEBUG;
454 if(done && eos) 467 if(done && eos)