NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
icmp_socket.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_ICMP_SOCKET_HPP__
2#define NEFORCE_NETWORK_ICMP_SOCKET_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15
162
163#pragma pack(push, 1)
184#pragma pack(pop)
185
202// TODO: Impl full ICMP socket
203class NEFORCE_API icmp_socket final : public socket_base {
204public:
214
226
236
237private:
238 bool receive_reply(milliseconds timeout, uint16_t expected_id, uint16_t expected_seq, ip_address& sender,
239 icmp_header& out_header, vector<char>& out_data, uint8_t& recv_ttl);
240
241 void send_echo_request(const ip_address& dest, uint16_t id, uint16_t seq, int ttl, const void* data,
242 size_t data_len);
243
244public:
248 icmp_socket() = default;
249
254 explicit icmp_socket(native_handle_type fd) noexcept :
255 socket_base(fd) {}
256
263 void open();
264
276 ping_result ping(const ip_address& dest, milliseconds timeout, uint16_t sequence = 0, const void* data = nullptr,
277 size_t data_len = 0);
278
290 vector<traceroute_hop> traceroute(const ip_address& dest, int max_hops = 30,
291 milliseconds probe_timeout = milliseconds(1000), int probes_per_hop = 3);
292};
293 // ICMP
295
296NEFORCE_END_NAMESPACE__
297#endif // NEFORCE_NETWORK_ICMP_SOCKET_HPP__
icmp_socket()=default
默认构造函数
vector< traceroute_hop > traceroute(const ip_address &dest, int max_hops=30, milliseconds probe_timeout=milliseconds(1000), int probes_per_hop=3)
执行Traceroute操作
icmp_socket(native_handle_type fd) noexcept
从原生句柄构造
void open()
打开ICMP socket
icmp_type
ICMP消息类型常量
@ ICMP_ECHO_REPLY
Echo Reply(Ping响应)
@ ICMP_ECHO_REQUEST
Echo Request(Ping请求)
@ ICMP_TIME_EXCEEDED
Time Exceeded(TTL超时)
ping_result ping(const ip_address &dest, milliseconds timeout, uint16_t sequence=0, const void *data=nullptr, size_t data_len=0)
执行Ping操作
IP地址封装类
uintptr_t native_handle_type
平台原生句柄类型
socket_base()
默认构造函数
动态大小数组容器
unsigned char uint8_t
8位无符号整数类型
unsigned short uint16_t
16位无符号整数类型
duration< int64_t, milli > milliseconds
毫秒持续时间
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
Socket基础类实现
ICMP头部结构定义
uint16_t checksum
校验和
uint16_t sequence
序列号
uint8_t type
ICMP消息类型
uint8_t code
消息代码
bool success
是否成功收到响应
size_t reply_size
响应数据大小(字节)
vector< milliseconds > rtt
每次探测的RTT值(-1超时)
动态大小数组容器