summaryrefslogtreecommitdiff
path: root/src/lib/util.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-09-23 17:50:31 +0100
committerCarl Hetherington <cth@carlh.net>2012-09-23 17:50:31 +0100
commite89fb9d81358b51ed0e231725f7fb6eb63f96c5b (patch)
tree7388764fb11b97f33c2ab9ffe8cea0679ce20d2e /src/lib/util.cc
parent6726393a4b186333b8e1080f3f1c5c4b77d4c2e6 (diff)
Use io_service per thread.
Diffstat (limited to 'src/lib/util.cc')
-rw-r--r--src/lib/util.cc30
1 files changed, 8 insertions, 22 deletions
diff --git a/src/lib/util.cc b/src/lib/util.cc
index 3f48d696b..8713c5922 100644
--- a/src/lib/util.cc
+++ b/src/lib/util.cc
@@ -438,9 +438,9 @@ colour_lut_index_to_name (int index)
return "";
}
-DeadlineWrapper::DeadlineWrapper (asio::io_service& io_service)
- : _io_service (io_service)
- , _deadline (io_service)
+DeadlineWrapper::DeadlineWrapper ()
+ : _deadline (_io_service)
+ , _socket (_io_service)
, _buffer_data (0)
{
_deadline.expires_at (posix_time::pos_infin);
@@ -448,18 +448,10 @@ DeadlineWrapper::DeadlineWrapper (asio::io_service& io_service)
}
void
-DeadlineWrapper::set_socket (shared_ptr<asio::ip::tcp::socket> socket)
-{
- _socket = socket;
-}
-
-void
DeadlineWrapper::check ()
{
if (_deadline.expires_at() <= asio::deadline_timer::traits_type::now ()) {
- if (_socket) {
- _socket->close ();
- }
+ _socket.close ();
_deadline.expires_at (posix_time::pos_infin);
}
@@ -469,15 +461,13 @@ DeadlineWrapper::check ()
void
DeadlineWrapper::connect (asio::ip::basic_resolver_entry<asio::ip::tcp> const & endpoint, int timeout)
{
- assert (_socket);
-
system::error_code ec = asio::error::would_block;
- _socket->async_connect (endpoint, lambda::var(ec) = lambda::_1);
+ _socket.async_connect (endpoint, lambda::var(ec) = lambda::_1);
do {
_io_service.run_one();
} while (ec == asio::error::would_block);
- if (ec || !_socket->is_open ()) {
+ if (ec || !_socket.is_open ()) {
throw NetworkError ("connect timed out");
}
}
@@ -485,12 +475,10 @@ DeadlineWrapper::connect (asio::ip::basic_resolver_entry<asio::ip::tcp> const &
void
DeadlineWrapper::write (uint8_t const * data, int size, int timeout)
{
- assert (_socket);
-
_deadline.expires_from_now (posix_time::seconds (timeout));
system::error_code ec = asio::error::would_block;
- asio::async_write (*_socket, asio::buffer (data, size), lambda::var(ec) = lambda::_1);
+ asio::async_write (_socket, asio::buffer (data, size), lambda::var(ec) = lambda::_1);
do {
_io_service.run_one ();
} while (ec == asio::error::would_block);
@@ -503,14 +491,12 @@ DeadlineWrapper::write (uint8_t const * data, int size, int timeout)
int
DeadlineWrapper::read (uint8_t* data, int size, int timeout)
{
- assert (_socket);
-
_deadline.expires_from_now (posix_time::seconds (timeout));
system::error_code ec = asio::error::would_block;
int amount_read = 0;
- _socket->async_read_some (
+ _socket.async_read_some (
asio::buffer (data, size),
(lambda::var(ec) = lambda::_1, lambda::var(amount_read) = lambda::_2)
);