X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=server.cpp;h=a000d9c6d08f0f3d799c07f3bfec1902f68fc141;hb=5cd46e39b4063d94f6dc559ae350beeb8406a8f9;hp=8282a562863deea72c1294cb55f8e0a0100f6a8d;hpb=4075cd5b3568e68b28c60019ad137b34445c0cf3;p=cubemap diff --git a/server.cpp b/server.cpp index 8282a56..a000d9c 100644 --- a/server.cpp +++ b/server.cpp @@ -1,9 +1,11 @@ -#include #include #include +#include #include +#include #include #include +#include #include #include #include @@ -202,10 +204,10 @@ void Server::add_stream(const string &stream_id, size_t backlog_size, Stream::En streams.insert(make_pair(stream_id, new Stream(stream_id, backlog_size, encoding))); } -void Server::add_stream_from_serialized(const StreamProto &stream) +void Server::add_stream_from_serialized(const StreamProto &stream, int data_fd) { MutexLock lock(&mutex); - streams.insert(make_pair(stream.stream_id(), new Stream(stream))); + streams.insert(make_pair(stream.stream_id(), new Stream(stream, data_fd))); } void Server::set_backlog_size(const string &stream_id, size_t new_size) @@ -376,13 +378,17 @@ sending_data_again: return; } if (bytes_to_send > stream->backlog_size) { - log(WARNING, "[%s] Client lost %lld bytes, maybe too slow connection", - client->remote_addr.c_str(), - (long long int)(bytes_to_send - stream->backlog_size)); + size_t bytes_lost = bytes_to_send - stream->backlog_size; client->stream_pos = stream->bytes_received - stream->backlog_size; - client->bytes_lost += bytes_to_send - stream->backlog_size; + client->bytes_lost += bytes_lost; ++client->num_loss_events; bytes_to_send = stream->backlog_size; + + double loss_fraction = double(client->bytes_lost) / double(client->bytes_lost + client->bytes_sent); + log(WARNING, "[%s] Client lost %lld bytes (total loss: %.2f%%), maybe too slow connection", + client->remote_addr.c_str(), + (long long int)(bytes_lost), + 100.0 * loss_fraction); } // See if we need to split across the circular buffer.