}
+#ifdef DCPOMATIC_HAVE_BOOST_ASIO_IP_BASIC_RESOLVER_RESULTS
+
/** Blocking connect.
* @param endpoint End-point to connect to.
*/
void
-Socket::connect (boost::asio::ip::tcp::endpoint endpoint)
+Socket::connect(boost::asio::ip::basic_resolver_results<boost::asio::ip::tcp> endpoints)
{
set_deadline_from_now(_timeout);
boost::system::error_code ec = boost::asio::error::would_block;
- _socket.async_connect (endpoint, boost::lambda::var(ec) = boost::lambda::_1);
+ boost::asio::async_connect(_socket, endpoints, boost::lambda::var(ec) = boost::lambda::_1);
do {
_io_context.run_one();
} while (ec == boost::asio::error::would_block);
}
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);
+ }
+}
+
+#endif
+
+/** Blocking connect.
+ * @param endpoint End-point to connect to.
+ */
+void
+Socket::connect(boost::asio::ip::tcp::endpoint endpoint)
+{
+ set_deadline_from_now(_timeout);
+ boost::system::error_code ec = boost::asio::error::would_block;
+ _socket.async_connect (endpoint, boost::lambda::var(ec) = boost::lambda::_1);
+ do {
+ _io_context.run_one();
+ } while (ec == boost::asio::error::would_block);
+
+ if (ec) {
+ throw NetworkError (String::compose (_("error during async_connect (%1)"), ec.value ()));
+ }
+
+ if (!_socket.is_open ()) {
+ throw NetworkError (_("connect timed out"));
+ }
+
+ if (_send_buffer_size) {
boost::asio::socket_base::send_buffer_size new_size(*_send_buffer_size);
_socket.set_option(new_size);
}
Socket::connect(string host_name, int port)
{
boost::asio::ip::tcp::resolver resolver(_io_context);
+#ifdef DCPOMATIC_HAVE_BOOST_ASIO_IP_BASIC_RESOLVER_RESULTS
+ connect(resolver.resolve(host_name, fmt::to_string(port)));
+#else
boost::asio::ip::tcp::resolver::query query(host_name, fmt::to_string(port));
connect(*resolver.resolve(query));
+#endif
}
}
void set_send_buffer_size (int size);
+
void connect(std::string host_name, int port);
void connect(boost::asio::ip::address address, int port);
bool check_read_digest ();
void start_write_digest ();
void finish_write_digest ();
- void connect(boost::asio::ip::tcp::endpoint);
+ void connect(boost::asio::ip::tcp::endpoint endpoint);
+#ifdef DCPOMATIC_HAVE_BOOST_ASIO_IP_BASIC_RESOLVER_RESULTS
+ void connect(boost::asio::ip::basic_resolver_results<boost::asio::ip::tcp> endpoints);
+#endif
dcpomatic::io_context _io_context;
boost::asio::deadline_timer _deadline;
for (auto const& i: Config::instance()->servers()) {
try {
boost::asio::ip::udp::resolver resolver(io_context);
+#ifdef DCPOMATIC_HAVE_BOOST_ASIO_IP_BASIC_RESOLVER_RESULTS
+ boost::asio::connect(socket, resolver.resolve(i, fmt::to_string(HELLO_PORT)));
+ socket.send(boost::asio::buffer(data.c_str(), data.size() + 1));
+#else
boost::asio::ip::udp::resolver::query query(i, fmt::to_string(HELLO_PORT));
- boost::asio::ip::udp::endpoint end_point (*resolver.resolve(query));
- socket.send_to (boost::asio::buffer(data.c_str(), data.size() + 1), end_point);
+ boost::asio::ip::udp::endpoint end_point(*resolver.resolve(query));
+ socket.send_to(boost::asio::buffer(data.c_str(), data.size() + 1), end_point);
+#endif
} catch (...) {
}
define_name='DCPOMATIC_HAVE_BOOST_ASIO_IO_CONTEXT',
mandatory=False)
+ conf.check_cxx(fragment="""
+ #include <boost/asio.hpp>
+ int main() { boost::asio::ip::basic_resolver_results<boost::asio::ip::tcp> x; }
+ """,
+ msg='Checking for boost::asio::ip::basic_resolver_results',
+ define_name='DCPOMATIC_HAVE_BOOST_ASIO_IP_BASIC_RESOLVER_RESULTS',
+ mandatory=False)
+
+
# sqlite3
conf.check_cfg(package="sqlite3", args='--cflags --libs', uselib_store='SQLITE3', mandatory=True)
conf.check_cxx(fragment="""