@@ -17,7 +17,7 @@ UDPWriter::UDPWriter(const std::string& host, int port) :
1717
1818UDPWriter::~UDPWriter () { Close (); }
1919
20- bool UDPWriter::CreateSocket ()
20+ bool UDPWriter::CreateSocket () try
2121{
2222 if (m_socketEstablished)
2323 {
@@ -38,28 +38,49 @@ bool UDPWriter::CreateSocket()
3838 Logger::info (" UDPWriter: Socket created for {}:{}" , m_host, m_port);
3939 return true ;
4040}
41-
42- void UDPWriter::Write (const std::string& message)
41+ catch (const boost::system::system_error& ex)
4342{
44- if (false == this ->m_socketEstablished && false == this ->CreateSocket ())
45- {
46- Logger::error (" UDPWriter: Failed to write message, socket not established {}:{}" , m_host, m_port);
47- return ;
48- }
43+ Logger::error (" UDP Writer: Boost exception: {}" , ex.what ());
44+ return false ;
45+ }
4946
47+ bool UDPWriter::TryToSend (const std::string& message) try
48+ {
5049 boost::system::error_code ec;
5150 for (int i = 0 ; i < 3 ; i++)
5251 {
5352 size_t sent = m_socket->send_to (boost::asio::buffer (message.data (), message.size ()), m_endpoint, 0 , ec);
5453 if (ec || sent < message.size ())
5554 {
5655 Logger::error (" UDP Writer: Failed to send message - {}, sent {} bytes out of {}" , ec.message (), sent, message.size ());
56+ continue ;
5757 }
58- break ;
58+ return true ;
59+ }
60+ return false ;
61+ }
62+ catch (const boost::system::system_error& ex)
63+ {
64+ Logger::error (" UDP Writer: Boost exception: {}" , ex.what ());
65+ return false ;
66+ }
67+
68+ void UDPWriter::Write (const std::string& message)
69+ {
70+ if (false == this ->m_socketEstablished && false == this ->CreateSocket ())
71+ {
72+ Logger::error (" UDPWriter: Failed to write message, socket not established {}:{}" , m_host, m_port);
73+ return ;
74+ }
75+
76+ if (TryToSend (message) == false )
77+ {
78+ Logger::error (" UDP Writer: Failed to send message: {}" , message);
79+ this ->Close ();
5980 }
6081}
6182
62- void UDPWriter::Close ()
83+ void UDPWriter::Close () try
6384{
6485 this ->m_socketEstablished = false ;
6586 if (m_socket && m_socket->is_open ())
@@ -71,4 +92,8 @@ void UDPWriter::Close()
7192 Logger::error (" UDP Writer: Error closing existing socket - {}" , ec.message ());
7293 }
7394 }
95+ }
96+ catch (const boost::system::system_error& ex)
97+ {
98+ Logger::error (" UDP Writer: Boost exception: {}" , ex.what ());
7499}
0 commit comments