*/
-#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 <boost/bind/bind.hpp>
#include <boost/lambda/lambda.hpp>
#include <iostream>
#include "i18n.h"
+
using std::shared_ptr;
using std::weak_ptr;
+
/** @param timeout Timeout in seconds */
Socket::Socket (int timeout)
: _deadline (_io_service)
_deadline.async_wait (boost::bind (&Socket::check, this));
}
+
/** Blocking connect.
* @param endpoint End-point to connect to.
*/
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.
}
}
+
void
Socket::write (uint32_t v)
{
write (reinterpret_cast<uint8_t*> (&v), 4);
}
+
/** Blocking read.
* @param data Buffer to read to.
* @param size Number of bytes to read.
}
}
+
uint32_t
Socket::read_uint32 ()
{
_read_digester.reset (new Digester());
}
+
void
Socket::start_write_digest ()
{
bool
Socket::ReadDigestScope::check ()
{
- shared_ptr<Socket> sp = _socket.lock ();
+ auto sp = _socket.lock ();
if (!sp) {
return false;
}
Socket::WriteDigestScope::~WriteDigestScope ()
{
- shared_ptr<Socket> sp = _socket.lock ();
+ auto sp = _socket.lock ();
if (sp) {
try {
sp->finish_write_digest ();
return memcmp(ref, actual, size) == 0;
}
+
void
Socket::finish_write_digest ()
{
write (buffer, size);
}
+
+void
+Socket::set_send_buffer_size (int size)
+{
+ _send_buffer_size = size;
+}
+