diff options
Diffstat (limited to '')
-rw-r--r-- | linden/indra/llmessage/lliosocket.cpp | 15 |
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) |