X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fdcpomatic_socket.cc;h=014e498e636e1578d7121c85405cfca7871229cf;hb=d710869f0a42285e81c72c1e5b9e76886e0d190a;hp=a92a294e6a05668dfa9ad10d8f982f85680a588d;hpb=dd9be86db6cde0afa5da0d1d1ac43b42e05dca26;p=dcpomatic.git diff --git a/src/lib/dcpomatic_socket.cc b/src/lib/dcpomatic_socket.cc index a92a294e6..014e498e6 100644 --- a/src/lib/dcpomatic_socket.cc +++ b/src/lib/dcpomatic_socket.cc @@ -18,19 +18,23 @@ */ -#include "dcpomatic_socket.h" + #include "compose.hpp" -#include "exceptions.h" #include "dcpomatic_assert.h" +#include "dcpomatic_log.h" +#include "dcpomatic_socket.h" +#include "exceptions.h" #include #include #include #include "i18n.h" + using std::shared_ptr; using std::weak_ptr; + /** @param timeout Timeout in seconds */ Socket::Socket (int timeout) : _deadline (_io_service) @@ -52,6 +56,7 @@ Socket::check () _deadline.async_wait (boost::bind (&Socket::check, this)); } + /** Blocking connect. * @param endpoint End-point to connect to. */ @@ -72,8 +77,19 @@ Socket::connect (boost::asio::ip::tcp::endpoint endpoint) if (!_socket.is_open ()) { throw NetworkError (_("connect timed out")); } + + if (_send_buffer_size) { + boost::asio::socket_base::send_buffer_size old_size; + _socket.get_option(old_size); + + boost::asio::socket_base::send_buffer_size new_size(*_send_buffer_size); + _socket.set_option(new_size); + + LOG_GENERAL("Changed socket send buffer size from %1 to %2", old_size.value(), *_send_buffer_size); + } } + /** Blocking write. * @param data Buffer to write. * @param size Number of bytes to write. @@ -99,6 +115,7 @@ Socket::write (uint8_t const * data, int size) } } + void Socket::write (uint32_t v) { @@ -106,6 +123,7 @@ Socket::write (uint32_t v) write (reinterpret_cast (&v), 4); } + /** Blocking read. * @param data Buffer to read to. * @param size Number of bytes to read. @@ -131,6 +149,7 @@ Socket::read (uint8_t* data, int size) } } + uint32_t Socket::read_uint32 () { @@ -147,6 +166,7 @@ Socket::start_read_digest () _read_digester.reset (new Digester()); } + void Socket::start_write_digest () { @@ -165,7 +185,7 @@ Socket::ReadDigestScope::ReadDigestScope (shared_ptr socket) bool Socket::ReadDigestScope::check () { - shared_ptr sp = _socket.lock (); + auto sp = _socket.lock (); if (!sp) { return false; } @@ -183,7 +203,7 @@ Socket::WriteDigestScope::WriteDigestScope (shared_ptr socket) Socket::WriteDigestScope::~WriteDigestScope () { - shared_ptr sp = _socket.lock (); + auto sp = _socket.lock (); if (sp) { try { sp->finish_write_digest (); @@ -216,6 +236,7 @@ Socket::check_read_digest () return memcmp(ref, actual, size) == 0; } + void Socket::finish_write_digest () { @@ -233,3 +254,10 @@ Socket::finish_write_digest () write (buffer, size); } + +void +Socket::set_send_buffer_size (int size) +{ + _send_buffer_size = size; +} +