Author: anthm Date: Mon Oct 15 21:08:51 2007 New Revision: 5884 Modified: freeswitch/trunk/src/switch_apr.c Log: wait there's more Modified: freeswitch/trunk/src/switch_apr.c ============================================================================== --- freeswitch/trunk/src/switch_apr.c (original) +++ freeswitch/trunk/src/switch_apr.c Mon Oct 15 21:08:51 2007 @@ -561,18 +561,24 @@ SWITCH_DECLARE(switch_status_t) switch_socket_send(switch_socket_t * sock, const char *buf, switch_size_t *len) { - switch_status_t status; - switch_size_t req = *len, wrote = 0, need = 0; - - status = apr_socket_send(sock, buf, len); - if (status == SWITCH_STATUS_SUCCESS) { - wrote = *len; - while (wrote < req && status == SWITCH_STATUS_SUCCESS) { - need = req - wrote; - status = apr_socket_send(sock, buf + wrote, &need); - wrote += need; + switch_status_t status = SWITCH_STATUS_SUCCESS; + switch_size_t req = *len, wrote = 0, need = *len; + int to_count = 0; + + while ((wrote < req && status == SWITCH_STATUS_SUCCESS) || (need == 0 && status == SWITCH_STATUS_BREAK)) { + need = req - wrote; + if ((status = apr_socket_send(sock, buf + wrote, &need)) == SWITCH_STATUS_BREAK) { + if (++to_count > 10000) { + status = SWITCH_STATUS_FALSE; + break; + } + switch_yield(1000); + } else { + to_count = 0; } + wrote += need; } + *len = wrote; return status;
participants (1)
-
Freeswitch SVN