X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=server.cpp;h=288224cc287dff9480b5443fd83453a9bba6d88b;hb=ce0d42a14da5686366d0c73fa9b152e90619ff91;hp=a5f6a329ec2fed4017f7407eeeee0ba932979be7;hpb=9b8129d05b5d1ec0caed09a40f170e967afc60b3;p=cubemap diff --git a/server.cpp b/server.cpp index a5f6a32..288224c 100644 --- a/server.cpp +++ b/server.cpp @@ -28,6 +28,10 @@ #include "stream.h" #include "util.h" +#ifndef SO_MAX_PACING_RATE +#define SO_MAX_PACING_RATE 47 +#endif + using namespace std; extern AccessLogThread *access_log; @@ -271,6 +275,14 @@ void Server::set_mark_pool(int stream_index, MarkPool *mark_pool) streams[stream_index]->mark_pool = mark_pool; } +void Server::set_pacing_rate(int stream_index, uint32_t pacing_rate) +{ + MutexLock lock(&mutex); + assert(clients.empty()); + assert(stream_index >= 0 && stream_index < ssize_t(streams.size())); + streams[stream_index]->pacing_rate = pacing_rate; +} + void Server::add_data_deferred(int stream_index, const char *data, size_t bytes, StreamStartSuitability suitable_for_stream_start) { assert(stream_index >= 0 && stream_index < ssize_t(streams.size())); @@ -432,7 +444,7 @@ sending_data_again: ssize_t ret; do { - loff_t offset = client->stream_pos % stream->backlog_size; + off_t offset = client->stream_pos % stream->backlog_size; ret = sendfile(client->sock, stream->data_fd, &offset, bytes_to_send); } while (ret == -1 && errno == EINTR); @@ -525,6 +537,11 @@ int Server::parse_request(Client *client) log_perror("setsockopt(SO_MARK)"); } } + if (setsockopt(client->sock, SOL_SOCKET, SO_MAX_PACING_RATE, &client->stream->pacing_rate, sizeof(client->stream->pacing_rate)) == -1) { + if (client->stream->pacing_rate != 0) { + log_perror("setsockopt(SO_MAX_PACING_RATE)"); + } + } client->request.clear(); return 200; // OK!