4#ifndef _Stroika_Frameworks_NetworkMonitor_Ping_h_
5#define _Stroika_Frameworks_NetworkMonitor_Ping_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
14#include "Stroika/Foundation/IO/Network/ConnectionlessSocket.h"
16#include "Stroika/Foundation/IO/Network/InternetProtocol/ICMP.h"
17#include "Stroika/Foundation/IO/Network/InternetProtocol/IP.h"
28namespace Stroika::Frameworks::NetworkMonitor::Ping {
40 static constexpr unsigned int kDefaultMaxHops = 64;
44 optional<unsigned int> fMaxHops;
48 static const inline Duration kDefaultTimeout{3.0s};
53 optional<Duration> fTimeout;
58 static constexpr size_t kDefaultPayloadSize = 32;
69 numeric_limits<uint16_t>::max () -
70 (
sizeof (IO::Network::InternetProtocol::ICMP::V4::PacketHeader) +
sizeof (IO::Network::InternetProtocol::IP::V4::PacketHeader)),
71 Traversal::Openness::eClosed, Traversal::Openness::eClosed};
76 optional<size_t> fPacketPayloadSize;
112 nonvirtual ResultType
RunOnce (
const optional<unsigned int>& ttl = {});
115 nonvirtual ResultType RunOnce_ICMP_ (
unsigned int ttl);
118 std::uniform_int_distribution<std::mt19937::result_type> fAllUInt16Distribution_{0, numeric_limits<uint16_t>::max ()};
119 std::mt19937 fRng_{std::random_device{}()};
122 size_t fICMPPacketSize_;
125 uint16_t fNextSequenceNumber_;
131 struct Pinger::ResultType {
133 unsigned int fHopCount{};
143 struct SampleOptions {
145 unsigned int fSampleCount{};
155 struct SampleResults {
156 optional<Duration> fMedianPingTime;
157 optional<unsigned int> fMedianHopCount;
158 unsigned int fExceptionCount{};
175 SampleResults
Sample (
const InternetAddress& addr,
const SampleOptions& sampleOptions = {},
const Options& options = {});
SampleResults Sample(const InternetAddress &addr, const SampleOptions &sampleOptions={}, const Options &options={})
Send network packets to the argument internet address (govered by sample Options and optins) - and re...
chrono::duration< double > DurationSeconds
chrono::duration<double> - a time span (length of time) measured in seconds, but high precision.
String is like std::u32string, except it is much easier to use, often much more space efficient,...
Logically halfway between std::array and std::vector; Smart 'direct memory array' - which when needed...
Duration is a chrono::duration<double> (=.
nonvirtual ResultType RunOnce(const optional< unsigned int > &ttl={})
run the Ping () operation one time, and return the (timing) results.
STRING_TYPE ToString(FLOAT_TYPE f, const ToStringOptions &options={})