
рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХреА рдиреЗрдЯрд╡рд░реНрдХ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдпрд╣ рдкрд┐рдВрдЧ рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╕реНрдерд╛рдиреЛрдВ рд╡рд╛рд▓реЗ рд╕рдВрдЧрдарди рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдирд╛ "рдкрд┐рдВрдЬрд░" рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддрдХрдиреАрдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереАрдВ:
- рдПрдХ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдбрд╝реА (рдХрдИ рд╕рдмрдиреЗрдЯ) рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
- рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ (65535 рд╣реЛ рд╕рдХрддреА рд╣реИ)ред
- рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рднреА рд╕рдордп рдкрд░ рдкрд┐рдВрдЧрд░ рдХреЛ "рдЦрд╛рдирд╛" рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
- рдЕрджрд░рдХ рдореЗрдВ рддреЗрдЬ рдЧрддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдкрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ (ICMP рдкрд┐рдВрдЧ, TCP рдкреЛрд░реНрдЯ рдкрд┐рдВрдЧ рдФрд░ рд░рд┐рдЬрд╝реЙрд▓реНрд╡ рдирд╛рдо)ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреИрдВрдк, рд▓реЗрдХрд┐рди рдпрд╣ рдиреЛрдбреНрд╕ (рдкреЛрд░реНрдЯ) рдХреА рдРрд╕реА рд╕реАрдорд╛рдУрдВ рдкрд░ рднрд╛рд░реА рдФрд░ рдЕрдиреБрддреНрдкрд╛рджрдХ рд╣реИред
ToR рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП, рдХрд┐рдП рдЧрдП рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдПрдХрд▓ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмрд╛рдж рдХреА рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдиреЗ рд╣рдореЗрдВ Boost.Asio рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЕрджрд░рдХ рдХрд╛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди
рдкрд┐рдВрдЬрд░ рдХреЗ рдХрд╛рдо рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдкрд┐рдВрдЧ рд╡рд░реНрдЧ рдкрд┐рдВрдЧ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдХреЙрд▓рдмреИрдХ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкрд┐рдВрдЬрд░ рдХреНрд▓рд╛рд╕ рдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдмрдирд╛рддрд╛ рд╣реИ, рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ, рдирдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХрддрд╛рд░рдмрджреНрдз рдХрд░рддрд╛ рд╣реИ, рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рде рдЦреБрд▓реЗ рд╕реЙрдХреЗрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕реНрдерд╛рдиреАрдп рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреБрд░реНрд╕рд┐рдпрд╛рдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдкрд┐рдВрдЧреЗрдмрд▓ рдкреЛрд░реНрдЯреНрд╕, рдХрдИ рд╣рдЬрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рджреБрд░реНрдЧрдо рдиреЛрдбреНрд╕ (рдкреЛрд░реНрдЯреНрд╕) рдкрд┐рдВрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдиреНрдпреВрдирддрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рдиреЛрдбреНрд╕ (рдкреЛрд░реНрдЯ) рдХреЛ рдкрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдИ рд╕реМ рд╕рдХреНрд░рд┐рдп рд╕реЙрдХреЗрдЯреНрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рдХреНрд░рд┐рдп рд╕реЙрдХреЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдиреЙрдирд▓рд╛рдЗрдирд░ рд╣реИред
рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдФрд░ рдкрд┐рдВрдЧ рд╕рдордп рдХреЗ рдмреАрдЪ рд╕рдВрддреБрд▓рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдХреНрд░рд┐рдп рд╕реЙрдХреЗрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреА рд╣реИред
рдкреЛрд░реНрдЯ рдЙрдкрд▓рдмреНрдзрддрд╛
рдкрд┐рдВрдЧ рдорд╢реАрди рдкрд░, рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд┐рдВрдЬрд░ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдкреЛрд░реНрдЯ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдорд╛рдиреНрдп рдкрддреЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдпрджрд┐ рдпрд╣ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреЛрд░реНрдЯ рдХреЛ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
typename PortState::Enum GetPortState(const Ports::value_type port) { boost::recursive_mutex::scoped_lock lock(m_PortsMutex); PortState::Enum& state = m_EnabledPorts[port]; if (state == PortState::Unknown) { state = PortState::Pending; const std::size_t service = GetNextService(); const SocketPtr socket(new TCPSocket(GetService(service))); const TimerPtr timer(new Timer(GetService(service))); socket->async_connect( Tcp::endpoint(Address(INVALID_IP), port), boost::bind( &PingerImpl::GetPortStateCallback, this, ba::placeholders::error, port, socket, timer ) ); timer->expires_from_now(boost::posix_time::seconds(1)); timer->async_wait(boost::bind(&PingerImpl::CancelConnect, this, socket)); } return state; } void GetPortStateCallback(const boost::system::error_code& e, const Ports::value_type port, const SocketPtr, const TimerPtr) { boost::recursive_mutex::scoped_lock lock(m_PortsMutex); m_EnabledPorts[port] = e ? PortState::Enabled : PortState::Disabled; } void CancelConnect(const SocketPtr socket) { boost::system::error_code e; socket->close(e); }
рдкрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рд╣реЛрд╕реНрдЯ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
getnameinfo рдХрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рддрд░рд╣
рд╕реЗ рдЧрд╛рдпрдм рд╣реИред
Boost.Asio рдореЗрдВ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд╛рдо рдЕрдзрд┐рдЧреНрд░рд╣рдг рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдереНрд░реЗрдб рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ
рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ
:: asio :: io_service рдСрдмреНрдЬреЗрдХреНрдЯ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрдарднреВрдорд┐ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ
рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ
:: asio_io_service рдСрдмреНрдЬреЗрдХреНрдЯ ред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд╛рдо рдФрд░ рдкрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
рдмрдврд╝рд╛рд╡рд╛ рджреЗрддреЗ рд╣реИрдВ
:: asio :: io_service рдкреВрд▓ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ , рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЛ рдЕрдкрдиреА рд╡рд╕реНрддреБ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
ICMP рдкрд┐рдВрдЧ
рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдХрдЪреНрдЪреЗ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Boost.org рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЯреАрд╕реАрдкреА рдкрд┐рдВрдЧ
рдпрд╣ рд╢реНрд░реЗрдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред рдпрджрд┐ рджреВрд░рд╕реНрде рд╣реЛрд╕реНрдЯ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреЛрд░реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рд╣реИ, рддреЛ рд╣реЛрд╕реНрдЯ рдХреЛ рдЙрдкрд▓рдмреНрдз рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рддреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдкрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд┐рдВрдЧ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдкрд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХреЙрд▓рдмреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рддрдм рддрдХ рдореМрдЬреВрдж рд░рд╣рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП
share_from_this () рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЯреАрд╕реАрдкреА рдкрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб:
virtual void StartTCPPing(std::size_t timeout) override { boost::mutex::scoped_lock lock(m_DataMutex); if (PingerLogic::IsCompleted() || m_Ports2Ping.empty()) return; Ports::const_iterator it = m_Ports2Ping.begin(); const Ports::const_iterator itEnd = m_Ports2Ping.end(); for (; it != itEnd; ) { const PortState::Enum state = m_Owner.GetPortState(*it);
рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб:
void PingPort(const Ports::value_type port) { const Tcp::endpoint ep(m_Address, port); const SocketPtr socket(new TCPSocket(m_Owner.GetService(m_ServiceIndex))); m_Sockets.push_back(socket); m_Owner.OnSocketCreated();
рдХреЙрд▓рдмреИрдХ:
void TCPConnectCallback(const boost::system::error_code& e, const SocketPtr socket) { m_Owner.OnSocketClosed();
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВрдбрд▓рд░:
void TCPPingSucceeded(const SocketPtr socket) { const boost::posix_time::time_duration td(boost::posix_time::microsec_clock::local_time() - m_StartTime); boost::system::error_code error; socket->shutdown(TCPSocket::shutdown_both, error);
рдирд╛рдо рд╣рд▓ рдХрд░рдирд╛
рдмреВрд╕реНрдЯ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░, рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
getaddrinfo рдпрд╛
getnameinfo (рдХреНрд░рдорд╢рдГ рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг, рдиреАрдЪреЗ)ред
virtual void StartResolveIpByName(const std::string& name) override { const typename Resolver::query query(Tcp::v4(), name, ""); m_Resolver.async_resolve(query, boost::bind( &Ping::ResolveIpCallback, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::iterator )); } virtual void StartResolveNameByIp(unsigned long ip) override { const Tcp::endpoint ep(Address(ip), 0); m_Resolver.async_resolve(ep, boost::bind( &Ping::ResolveFQDNCallback, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::iterator )); }
рдкрд╣рд▓рд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЗрд╕реА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ NetBIOS рдирд╛рдо рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЛрдб рдХреЗ FQDN рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдХрд╛ рдЖрдИрдкреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рд╣реИред
рдЕрджрд░рдХ рдХрд╛ рддрд░реНрдХ
рджрд░рдЕрд╕рд▓, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЕрдореВрд░реНрддрди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдХрдИ рдХрд╛рд░рдг рд╣реИрдВред
- рдЕрджрд░рдХ рддрд░реНрдХ рд╕реЗ рд╕реЙрдХреЗрдЯ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
- рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд┐рдВрдЬрд░ рдХреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдХрдИ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
- рдпреВрдирд┐рдЯ рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд░реНрддреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрджрд░рдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкреВрд░реЗ рддрд░реНрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред
рд╡рд╣ рд╡рд░реНрдЧ рдЬреЛ рдкрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
class Ping : public boost::enable_shared_from_this<Ping>, public PingerLogic
рдЙрд╕реА рд╕рдордп, рдкрд┐рдВрдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╣рдо
PingerLogic рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдХреЗрд╡рд▓ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджреЗрдВрдЧреЗ рдЬреЛ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддреЗ рд╣реИрдВред
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдкрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдХрд╡рд░реЗрдЬ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд┐рдВрдЬ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рджреЗрдЦрддреЗ рд░рд╣реЛред
рд╕рд░реНрдЧреЗрдИ рдХрд░реНрдгрдЦреЛрд╡, рд╡рд░рд┐рд╖реНрда рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдкреЙрдЬрд┐рдЯрд┐рд╡ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреАрдЬ (
рд╕реАрдПрд▓рдЖрд░рдПрди ) рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред