From f5b7bef391597e33bfc5042b1169232e3fcb2e04 Mon Sep 17 00:00:00 2001 From: Max SCHMELLER Date: Tue, 27 Aug 2024 14:51:58 +0900 Subject: [PATCH 1/3] feat(udp_socket): allow user to set internal socket buffer size Signed-off-by: Max SCHMELLER --- .../include/boost_udp_driver/udp_socket.hpp | 17 ++++++++++++++--- udp_driver/src/udp_socket.cpp | 14 ++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/udp_driver/include/boost_udp_driver/udp_socket.hpp b/udp_driver/include/boost_udp_driver/udp_socket.hpp index df46398..72a3424 100644 --- a/udp_driver/include/boost_udp_driver/udp_socket.hpp +++ b/udp_driver/include/boost_udp_driver/udp_socket.hpp @@ -17,13 +17,14 @@ #ifndef UDP_DRIVER__UDP_SOCKET_HPP_ #define UDP_DRIVER__UDP_SOCKET_HPP_ +#include "boost_io_context/io_context.hpp" + #include +#include +#include #include #include -#include "boost_io_context/io_context.hpp" -#include "boost_msg_converters/converters.hpp" - namespace drivers { namespace udp_driver @@ -67,6 +68,16 @@ class UdpSocket void bind(); void setMulticast(bool value); + /** + * @brief Set the socket's internal receive buffer size to `n_bytes`. See `SO_RCVBUF` in `man 7 + * socket` for more information. + * + * @param n_bytes The number of bytes to allocate. + * @return true If the buffer has been resizes successfully. + * @return false If there was an error, such as the `net.core.rmem_max` value being exceeded. + */ + bool setKernelBufferSize(int32_t n_bytes); + /* * Blocking Send Operation */ diff --git a/udp_driver/src/udp_socket.cpp b/udp_driver/src/udp_socket.cpp index 7ff4dbf..6a01a1b 100644 --- a/udp_driver/src/udp_socket.cpp +++ b/udp_driver/src/udp_socket.cpp @@ -23,6 +23,7 @@ #include #include "boost/asio.hpp" +#include #include "rclcpp/logging.hpp" namespace drivers @@ -263,5 +264,18 @@ void UdpSocket::setMulticast(bool value) m_use_multicast = value; } +bool UdpSocket::setKernelBufferSize(int32_t n_bytes) { + boost::asio::socket_base::receive_buffer_size buffer_size_option{ n_bytes }; + + try { + m_udp_socket.set_option(buffer_size_option); + } catch (boost::system::system_error & error) { + RCLCPP_ERROR_STREAM(rclcpp::get_logger("UdpSocket::setkernelBufferSize"), error.what()); + return false; + } + + return true; +} + } // namespace udp_driver } // namespace drivers From 8e7ed1a2e9e4cbbe2896d53d07cb9876e9ab87cf Mon Sep 17 00:00:00 2001 From: Max Schmeller <6088931+mojomex@users.noreply.github.com> Date: Tue, 3 Sep 2024 19:02:07 +0900 Subject: [PATCH 2/3] chore: fix typo Co-authored-by: Kenzo Lobos Tsunekawa Signed-off-by: Max SCHMELLER --- udp_driver/include/boost_udp_driver/udp_socket.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/udp_driver/include/boost_udp_driver/udp_socket.hpp b/udp_driver/include/boost_udp_driver/udp_socket.hpp index 72a3424..07498ea 100644 --- a/udp_driver/include/boost_udp_driver/udp_socket.hpp +++ b/udp_driver/include/boost_udp_driver/udp_socket.hpp @@ -73,7 +73,7 @@ class UdpSocket * socket` for more information. * * @param n_bytes The number of bytes to allocate. - * @return true If the buffer has been resizes successfully. + * @return true If the buffer has been resized successfully. * @return false If there was an error, such as the `net.core.rmem_max` value being exceeded. */ bool setKernelBufferSize(int32_t n_bytes); From 86b9aae8555dbb4a3103c21475d7f5e2d49981ab Mon Sep 17 00:00:00 2001 From: Maximilian Schmeller Date: Wed, 11 Sep 2024 12:34:28 +0900 Subject: [PATCH 3/3] chore(udp_socket): fixed include <>/"" and reordered includes Signed-off-by: Max SCHMELLER --- udp_driver/include/boost_udp_driver/udp_socket.hpp | 1 - udp_driver/src/udp_socket.cpp | 11 ++++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/udp_driver/include/boost_udp_driver/udp_socket.hpp b/udp_driver/include/boost_udp_driver/udp_socket.hpp index 07498ea..6b628be 100644 --- a/udp_driver/include/boost_udp_driver/udp_socket.hpp +++ b/udp_driver/include/boost_udp_driver/udp_socket.hpp @@ -19,7 +19,6 @@ #include "boost_io_context/io_context.hpp" -#include #include #include #include diff --git a/udp_driver/src/udp_socket.cpp b/udp_driver/src/udp_socket.cpp index 6a01a1b..6d6b073 100644 --- a/udp_driver/src/udp_socket.cpp +++ b/udp_driver/src/udp_socket.cpp @@ -16,16 +16,17 @@ #include "boost_udp_driver/udp_socket.hpp" +#include + +#include +#include + #include -#include #include #include +#include #include -#include "boost/asio.hpp" -#include -#include "rclcpp/logging.hpp" - namespace drivers { namespace udp_driver