Make the Socket connect() call a little friendlier.
authorCarl Hetherington <cth@carlh.net>
Mon, 17 Mar 2025 19:27:47 +0000 (20:27 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 22 Mar 2025 12:29:58 +0000 (13:29 +0100)
This avoids some boilerplate.

src/lib/dcp_video.cc
src/lib/dcpomatic_socket.cc
src/lib/dcpomatic_socket.h
src/lib/encode_server.cc
src/tools/dcpomatic.cc
test/socket_test.cc

index f250d45053e6ae8fce14da7c050436a0ff6792a6..e6bbfdf5656d6e2d277f3917bb0d3dabc614b8da 100644 (file)
@@ -225,15 +225,10 @@ DCPVideo::encode_locally () const
 ArrayData
 DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) const
 {
-       boost::asio::io_service io_service;
-       boost::asio::ip::tcp::resolver resolver (io_service);
-       boost::asio::ip::tcp::resolver::query query(serv.host_name(), fmt::to_string(ENCODE_FRAME_PORT));
-       boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
-
        auto socket = make_shared<Socket>(timeout);
        socket->set_send_buffer_size (512 * 1024);
 
-       socket->connect (*endpoint_iterator);
+       socket->connect(serv.host_name(), ENCODE_FRAME_PORT);
 
        /* Collect all XML metadata */
        xmlpp::Document doc;
index 83ab072d291e02aa99bf1decec212451f60dfe5e..f03536cb7fcd6e25bed84a262096391bb4ae0df6 100644 (file)
@@ -24,6 +24,7 @@
 #include "dcpomatic_log.h"
 #include "dcpomatic_socket.h"
 #include "exceptions.h"
+#include <fmt/format.h>
 #include <boost/bind/bind.hpp>
 #include <boost/lambda/lambda.hpp>
 #include <iostream>
@@ -32,6 +33,7 @@
 
 
 using std::shared_ptr;
+using std::string;
 using std::weak_ptr;
 
 
@@ -88,6 +90,22 @@ Socket::connect (boost::asio::ip::tcp::endpoint endpoint)
 }
 
 
+void
+Socket::connect(string host_name, int port)
+{
+       boost::asio::ip::tcp::resolver resolver(_io_service);
+       boost::asio::ip::tcp::resolver::query query(host_name, fmt::to_string(port));
+       connect(*resolver.resolve(query));
+}
+
+
+void
+Socket::connect(boost::asio::ip::address address, int port)
+{
+       connect(boost::asio::ip::tcp::endpoint(address, port));
+}
+
+
 /** Blocking write.
  *  @param data Buffer to write.
  *  @param size Number of bytes to write.
index 86e5f12661185e2ad90d4ea0335fcd55a37c4b8d..ed2d8b728c6148fcd4a2f4704c207e77cfe66b49 100644 (file)
@@ -43,7 +43,8 @@ public:
        }
 
        void set_send_buffer_size (int size);
-       void connect (boost::asio::ip::tcp::endpoint);
+       void connect(std::string host_name, int port);
+       void connect(boost::asio::ip::address address, int port);
 
        void write (uint32_t n);
        void write (uint8_t const * data, int size);
@@ -90,6 +91,7 @@ private:
        bool check_read_digest ();
        void start_write_digest ();
        void finish_write_digest ();
+       void connect(boost::asio::ip::tcp::endpoint);
 
        boost::asio::io_service _io_service;
        boost::asio::deadline_timer _deadline;
index 08e661eac7f82608bbd19514d908be859da639ad..9fd330a12e849140aaa2f1a6dc71d4fda6d36b2b 100644 (file)
@@ -309,7 +309,7 @@ EncodeServer::broadcast_received ()
 
                try {
                        auto socket = make_shared<Socket>();
-                       socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(), MAIN_SERVER_PRESENCE_PORT));
+                       socket->connect(_broadcast.send_endpoint.address(), MAIN_SERVER_PRESENCE_PORT);
                        socket->write (xml.bytes() + 1);
                        socket->write ((uint8_t *) xml.c_str(), xml.bytes() + 1);
                } catch (...) {
@@ -318,7 +318,7 @@ EncodeServer::broadcast_received ()
 
                try {
                        auto socket = make_shared<Socket>();
-                       socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(), BATCH_SERVER_PRESENCE_PORT));
+                       socket->connect(_broadcast.send_endpoint.address(), BATCH_SERVER_PRESENCE_PORT);
                        socket->write (xml.bytes() + 1);
                        socket->write ((uint8_t *) xml.c_str(), xml.bytes() + 1);
                } catch (...) {
index d859e093730dc4a9126d7b341a97d7fb65355857..3c0f8433991c6dee088870e851c32c0a189bff06 100644 (file)
@@ -900,12 +900,8 @@ private:
                */
                for (int i = 0; i < 8; ++i) {
                        try {
-                               boost::asio::io_service io_service;
-                               boost::asio::ip::tcp::resolver resolver (io_service);
-                               boost::asio::ip::tcp::resolver::query query("127.0.0.1", fmt::to_string(port));
-                               boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
                                Socket socket (5);
-                               socket.connect (*endpoint_iterator);
+                               socket.connect("127.0.0.1", port);
                                DCPOMATIC_ASSERT (_film->directory ());
                                socket.write (message.length() + 1);
                                socket.write ((uint8_t *) message.c_str(), message.length() + 1);
index 395e5f720a3f22622b27fd1df50ddac9c52d0d7a..70df1266b784d5d52832138c7d616a0c834d963c 100644 (file)
@@ -125,13 +125,8 @@ BOOST_AUTO_TEST_CASE (socket_basic_test)
        TestServer server(false);
        server.expect (13);
 
-       boost::asio::io_service io_service;
-       tcp::resolver resolver (io_service);
-       tcp::resolver::query query("127.0.0.1", fmt::to_string(TEST_SERVER_PORT));
-       tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
-
        auto socket = make_shared<Socket>();
-       socket->connect (*endpoint_iterator);
+       socket->connect("127.0.0.1", TEST_SERVER_PORT);
        send (socket, "Hello world!");
 
        server.await ();
@@ -147,13 +142,8 @@ BOOST_AUTO_TEST_CASE (socket_digest_test1)
        TestServer server(false);
        server.expect (13 + 16);
 
-       boost::asio::io_service io_service;
-       tcp::resolver resolver (io_service);
-       tcp::resolver::query query("127.0.0.1", fmt::to_string(TEST_SERVER_PORT));
-       tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
-
        shared_ptr<Socket> socket(new Socket);
-       socket->connect (*endpoint_iterator);
+       socket->connect("127.0.0.1", TEST_SERVER_PORT);
        {
                Socket::WriteDigestScope ds(socket);
                send (socket, "Hello world!");
@@ -176,13 +166,8 @@ BOOST_AUTO_TEST_CASE (socket_digest_test2)
        TestServer server(true);
        server.expect (13);
 
-       boost::asio::io_service io_service;
-       tcp::resolver resolver (io_service);
-       tcp::resolver::query query("127.0.0.1", fmt::to_string(TEST_SERVER_PORT));
-       tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
-
        shared_ptr<Socket> socket(new Socket);
-       socket->connect (*endpoint_iterator);
+       socket->connect("127.0.0.1", TEST_SERVER_PORT);
        {
                Socket::WriteDigestScope ds(socket);
                send (socket, "Hello world!");