fix streamed data out

This commit is contained in:
zefie
2021-08-12 00:55:04 -04:00
parent 896bba7c4b
commit c511632e91

View File

@@ -736,27 +736,30 @@ async function sendToClient(socket, headers_obj, data) {
} }
} }
async function sendToSocket(socket, data, chunk_offset = 0) { async function sendToSocket(socket, data) {
// buffer size = lesser of minisrv_config.config.chunk_size or size remaining // buffer size = lesser of minisrv_config.config.chunk_size or size remaining
var chunk_size = 16384; var chunk_size = 16384;
var can_write = true; var can_write = true;
var data_left = 0; var expected_data_out = 0;
while (data_left != data.byteLength && can_write) { while ((socket.bytesWritten == 0 || socket.bytesWritten != expected_data_out) && can_write) {
var data_left = (data.byteLength - chunk_offset); if (expected_data_out === 0) expected_data_out = data.byteLength + (socket_sessions[socket.id].socket_total_written || 0);
if (data_left === 0) break; if (socket.bytesWritten == expected_data_out) break;
var data_left = (expected_data_out - socket.bytesWritten);
var buffer_size = (data_left >= chunk_size) ? chunk_size : data_left; var buffer_size = (data_left >= chunk_size) ? chunk_size : data_left;
var offset = (data.byteLength - data_left);
var chunk = new Buffer.alloc(buffer_size); var chunk = new Buffer.alloc(buffer_size);
chunk_offset += data.copy(chunk, 0, chunk_offset, (chunk_offset + buffer_size)); data.copy(chunk, 0, offset, (offset + buffer_size));
can_write = socket.write(chunk); can_write = socket.write(chunk);
if (!can_write) { if (!can_write) {
socket.once('drain', function () { socket.once('drain', function () {
sendToSocket(socket, data, socket.bytesWritten); sendToSocket(socket, data);
}); });
break; break;
} }
} }
if (data_left == data.byteLength) { if (socket.bytesWritten == expected_data_out) {
socket_sessions[socket.id].socket_total_written = socket.bytesWritten;
if (socket_sessions[socket.id].expecting_post_data) delete socket_sessions[socket.id].expecting_post_data; if (socket_sessions[socket.id].expecting_post_data) delete socket_sessions[socket.id].expecting_post_data;
if (socket_sessions[socket.id].header_buffer) delete socket_sessions[socket.id].header_buffer; if (socket_sessions[socket.id].header_buffer) delete socket_sessions[socket.id].header_buffer;
if (socket_sessions[socket.id].secure_buffer) delete socket_sessions[socket.id].secure_buffer; if (socket_sessions[socket.id].secure_buffer) delete socket_sessions[socket.id].secure_buffer;