mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 12:24:19 +00:00
reopen UDP socket in case of error
This commit is contained in:
parent
1d8807a6ba
commit
230c2aaf26
41
SSU.cpp
41
SSU.cpp
@ -20,11 +20,7 @@ namespace transport
|
|||||||
m_IntroducersUpdateTimer (m_Service), m_PeerTestsCleanupTimer (m_Service),
|
m_IntroducersUpdateTimer (m_Service), m_PeerTestsCleanupTimer (m_Service),
|
||||||
m_TerminationTimer (m_Service), m_TerminationTimerV6 (m_ServiceV6)
|
m_TerminationTimer (m_Service), m_TerminationTimerV6 (m_ServiceV6)
|
||||||
{
|
{
|
||||||
m_SocketV6.open (boost::asio::ip::udp::v6());
|
OpenSocketV6 ();
|
||||||
m_SocketV6.set_option (boost::asio::ip::v6_only (true));
|
|
||||||
m_SocketV6.set_option (boost::asio::socket_base::receive_buffer_size (65535));
|
|
||||||
m_SocketV6.set_option (boost::asio::socket_base::send_buffer_size (65535));
|
|
||||||
m_SocketV6.bind (m_EndpointV6);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SSUServer::SSUServer (int port):
|
SSUServer::SSUServer (int port):
|
||||||
@ -32,27 +28,36 @@ namespace transport
|
|||||||
m_Thread (nullptr), m_ThreadV6 (nullptr), m_ReceiversThread (nullptr),
|
m_Thread (nullptr), m_ThreadV6 (nullptr), m_ReceiversThread (nullptr),
|
||||||
m_Work (m_Service), m_WorkV6 (m_ServiceV6), m_ReceiversWork (m_ReceiversService),
|
m_Work (m_Service), m_WorkV6 (m_ServiceV6), m_ReceiversWork (m_ReceiversService),
|
||||||
m_Endpoint (boost::asio::ip::udp::v4 (), port), m_EndpointV6 (boost::asio::ip::udp::v6 (), port),
|
m_Endpoint (boost::asio::ip::udp::v4 (), port), m_EndpointV6 (boost::asio::ip::udp::v6 (), port),
|
||||||
m_Socket (m_ReceiversService, m_Endpoint), m_SocketV6 (m_ReceiversService),
|
m_Socket (m_ReceiversService), m_SocketV6 (m_ReceiversService),
|
||||||
m_IntroducersUpdateTimer (m_Service), m_PeerTestsCleanupTimer (m_Service),
|
m_IntroducersUpdateTimer (m_Service), m_PeerTestsCleanupTimer (m_Service),
|
||||||
m_TerminationTimer (m_Service), m_TerminationTimerV6 (m_ServiceV6)
|
m_TerminationTimer (m_Service), m_TerminationTimerV6 (m_ServiceV6)
|
||||||
{
|
{
|
||||||
|
OpenSocket ();
|
||||||
m_Socket.set_option (boost::asio::socket_base::receive_buffer_size (65535));
|
|
||||||
m_Socket.set_option (boost::asio::socket_base::send_buffer_size (65535));
|
|
||||||
if (context.SupportsV6 ())
|
if (context.SupportsV6 ())
|
||||||
{
|
OpenSocketV6 ();
|
||||||
m_SocketV6.open (boost::asio::ip::udp::v6());
|
|
||||||
m_SocketV6.set_option (boost::asio::ip::v6_only (true));
|
|
||||||
m_SocketV6.set_option (boost::asio::socket_base::receive_buffer_size (65535));
|
|
||||||
m_SocketV6.set_option (boost::asio::socket_base::send_buffer_size (65535));
|
|
||||||
m_SocketV6.bind (m_EndpointV6);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SSUServer::~SSUServer ()
|
SSUServer::~SSUServer ()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SSUServer::OpenSocket ()
|
||||||
|
{
|
||||||
|
m_Socket.open (boost::asio::ip::udp::v4());
|
||||||
|
m_Socket.set_option (boost::asio::socket_base::receive_buffer_size (65535));
|
||||||
|
m_Socket.set_option (boost::asio::socket_base::send_buffer_size (65535));
|
||||||
|
m_Socket.bind (m_Endpoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SSUServer::OpenSocketV6 ()
|
||||||
|
{
|
||||||
|
m_SocketV6.open (boost::asio::ip::udp::v6());
|
||||||
|
m_SocketV6.set_option (boost::asio::ip::v6_only (true));
|
||||||
|
m_SocketV6.set_option (boost::asio::socket_base::receive_buffer_size (65535));
|
||||||
|
m_SocketV6.set_option (boost::asio::socket_base::send_buffer_size (65535));
|
||||||
|
m_SocketV6.bind (m_EndpointV6);
|
||||||
|
}
|
||||||
|
|
||||||
void SSUServer::Start ()
|
void SSUServer::Start ()
|
||||||
{
|
{
|
||||||
m_IsRunning = true;
|
m_IsRunning = true;
|
||||||
@ -211,6 +216,8 @@ namespace transport
|
|||||||
if (ecode != boost::asio::error::operation_aborted)
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "SSU: receive error: ", ecode.message ());
|
LogPrint (eLogError, "SSU: receive error: ", ecode.message ());
|
||||||
|
m_Socket.close ();
|
||||||
|
OpenSocket ();
|
||||||
Receive ();
|
Receive ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -242,6 +249,8 @@ namespace transport
|
|||||||
if (ecode != boost::asio::error::operation_aborted)
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
{
|
{
|
||||||
LogPrint (eLogError, "SSU: v6 receive error: ", ecode.message ());
|
LogPrint (eLogError, "SSU: v6 receive error: ", ecode.message ());
|
||||||
|
m_SocketV6.close ();
|
||||||
|
OpenSocketV6 ();
|
||||||
ReceiveV6 ();
|
ReceiveV6 ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user