]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
retry send when the socket sent less than we want
authorSeven Du <dujinfang@gmail.com>
Tue, 30 Dec 2014 05:16:28 +0000 (13:16 +0800)
committerSeven Du <dujinfang@gmail.com>
Tue, 30 Dec 2014 05:16:28 +0000 (13:16 +0800)
src/mod/endpoints/mod_verto/mod_verto.c

index ae9d9a9e2f032ec1cd19715e8e901b8ce0afc504..76164169825cf482fcd01ca0ab52b4770cdc4c03 100644 (file)
@@ -1456,6 +1456,9 @@ static void http_static_handler(switch_http_request_t *request, verto_vhost_t *v
 
                for (;;) {
                        switch_status_t status;
+                       ssize_t written = 0;
+                       ssize_t ret = 0;
+                       int sanity = 3;
 
                        flen = sizeof(chunk);
                        status = switch_file_read(fd, chunk, &flen);
@@ -1464,7 +1467,17 @@ static void http_static_handler(switch_http_request_t *request, verto_vhost_t *v
                                break;
                        }
 
-                       ws_raw_write(&jsock->ws, chunk, flen);
+again:
+                       ret = ws_raw_write(&jsock->ws, chunk + written, flen);
+                       if (ret == -1) {
+                               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "error write %" SWITCH_SIZE_T_FMT " bytes!\n", flen);
+                               ws_close(&jsock->ws, WS_NONE);
+                       } else if (ret > 0 && ret < flen && sanity > 0) {
+                               switch_yield(1000);
+                               flen -= ret;
+                               written += ret;
+                               goto again;
+                       }
                }
                switch_file_close(fd);
        } else {