55//! This library provides both synchronous and asynchronous ping implementations,
66//! as well as streaming interfaces for continuous ping operations.
77
8+ #![ allow( clippy:: too_many_arguments) ] // 添加允许多参数的属性
9+
810mod protocols;
911mod types;
1012mod utils;
@@ -24,17 +26,28 @@ pub use types::result::PingResult;
2426
2527/// 创建非阻塞 ping 流
2628#[ pyfunction]
27- #[ pyo3( signature = ( target, interval_ms=1000 , interface=None , ipv4=false , ipv6=false , count=None ) ) ]
29+ #[ pyo3( signature = ( target, interval_ms=1000 , interface=None , ipv4=false , ipv6=false , count=None , dns_pre_resolve= true , dns_resolve_timeout_ms= None ) ) ]
2830fn create_ping_stream (
2931 target : & Bound < PyAny > ,
3032 interval_ms : i64 ,
3133 interface : Option < String > ,
3234 ipv4 : bool ,
3335 ipv6 : bool ,
3436 count : Option < usize > ,
37+ dns_pre_resolve : bool ,
38+ dns_resolve_timeout_ms : Option < i64 > ,
3539) -> PyResult < PingStream > {
3640 // 直接使用 PingStream 的构造函数
37- PingStream :: new ( target, interval_ms, interface, ipv4, ipv6, count)
41+ PingStream :: new (
42+ target,
43+ interval_ms,
44+ interface,
45+ ipv4,
46+ ipv6,
47+ count,
48+ dns_pre_resolve,
49+ dns_resolve_timeout_ms,
50+ )
3851}
3952
4053/// 执行单次 ping(同步版本)
@@ -43,17 +56,27 @@ fn create_ping_stream(
4356/// - `timeout_ms`: 等待响应的超时时间(毫秒),默认 1000ms
4457/// 注意:内部实现中,这个值会被用作 `interval_ms` 传递给底层 ping 命令
4558#[ pyfunction]
46- #[ pyo3( signature = ( target, timeout_ms=1000 , interface=None , ipv4=false , ipv6=false ) ) ]
59+ #[ pyo3( signature = ( target, timeout_ms=1000 , interface=None , ipv4=false , ipv6=false , dns_pre_resolve= true , dns_resolve_timeout_ms= None ) ) ]
4760fn ping_once (
4861 target : & Bound < PyAny > ,
4962 timeout_ms : i64 ,
5063 interface : Option < String > ,
5164 ipv4 : bool ,
5265 ipv6 : bool ,
66+ dns_pre_resolve : bool ,
67+ dns_resolve_timeout_ms : Option < i64 > ,
5368) -> PyResult < PingResult > {
5469 // 创建 Pinger 实例
5570 // 注意:这里将 timeout_ms 作为 interval_ms 传递,因为 ping_once 中会将其用作超时时间
56- let pinger = Pinger :: new ( target, timeout_ms, interface, ipv4, ipv6) ?;
71+ let pinger = Pinger :: new (
72+ target,
73+ timeout_ms,
74+ interface,
75+ ipv4,
76+ ipv6,
77+ dns_pre_resolve,
78+ dns_resolve_timeout_ms,
79+ ) ?;
5780
5881 // 执行 ping_once
5982 pinger. ping_once ( )
@@ -65,26 +88,36 @@ fn ping_once(
6588/// - `timeout_ms`: 等待响应的超时时间(毫秒),默认 1000ms
6689/// 注意:内部实现中,这个值会被用作 `interval_ms` 传递给底层 ping 命令
6790#[ pyfunction]
68- #[ pyo3( signature = ( target, timeout_ms=1000 , interface=None , ipv4=false , ipv6=false ) ) ]
91+ #[ pyo3( signature = ( target, timeout_ms=1000 , interface=None , ipv4=false , ipv6=false , dns_pre_resolve= true , dns_resolve_timeout_ms= None ) ) ]
6992fn ping_once_async < ' py > (
7093 py : Python < ' py > ,
7194 target : & Bound < PyAny > ,
7295 timeout_ms : i64 ,
7396 interface : Option < String > ,
7497 ipv4 : bool ,
7598 ipv6 : bool ,
99+ dns_pre_resolve : bool ,
100+ dns_resolve_timeout_ms : Option < i64 > ,
76101) -> PyResult < Bound < ' py , PyAny > > {
77102 // 创建 AsyncPinger 实例
78103 // 注意:这里将 timeout_ms 作为 interval_ms 传递,因为 ping_once 中会将其用作超时时间
79- let pinger = AsyncPinger :: new ( target, timeout_ms, interface, ipv4, ipv6) ?;
104+ let pinger = AsyncPinger :: new (
105+ target,
106+ timeout_ms,
107+ interface,
108+ ipv4,
109+ ipv6,
110+ dns_pre_resolve,
111+ dns_resolve_timeout_ms,
112+ ) ?;
80113
81114 // 执行异步 ping_once
82115 pinger. ping_once ( py)
83116}
84117
85118/// 执行多次 ping(同步版本)
86119#[ pyfunction]
87- #[ pyo3( signature = ( target, count=4 , interval_ms=1000 , timeout_ms=None , interface=None , ipv4=false , ipv6=false ) ) ]
120+ #[ pyo3( signature = ( target, count=4 , interval_ms=1000 , timeout_ms=None , interface=None , ipv4=false , ipv6=false , dns_pre_resolve= true , dns_resolve_timeout_ms= None ) ) ]
88121fn ping_multiple (
89122 target : & Bound < PyAny > ,
90123 count : i32 ,
@@ -93,17 +126,27 @@ fn ping_multiple(
93126 interface : Option < String > ,
94127 ipv4 : bool ,
95128 ipv6 : bool ,
129+ dns_pre_resolve : bool ,
130+ dns_resolve_timeout_ms : Option < i64 > ,
96131) -> PyResult < Vec < PingResult > > {
97132 // 创建 Pinger 实例
98- let pinger = Pinger :: new ( target, interval_ms, interface, ipv4, ipv6) ?;
133+ let pinger = Pinger :: new (
134+ target,
135+ interval_ms,
136+ interface,
137+ ipv4,
138+ ipv6,
139+ dns_pre_resolve,
140+ dns_resolve_timeout_ms,
141+ ) ?;
99142
100143 // 执行 ping_multiple
101144 pinger. ping_multiple ( count, timeout_ms)
102145}
103146
104147/// 执行多次 ping(异步版本)
105148#[ pyfunction]
106- #[ pyo3( signature = ( target, count=4 , interval_ms=1000 , timeout_ms=None , interface=None , ipv4=false , ipv6=false ) ) ]
149+ #[ pyo3( signature = ( target, count=4 , interval_ms=1000 , timeout_ms=None , interface=None , ipv4=false , ipv6=false , dns_pre_resolve= true , dns_resolve_timeout_ms= None ) ) ]
107150#[ allow( clippy:: too_many_arguments) ] // 添加允许多参数的属性
108151fn ping_multiple_async < ' py > (
109152 py : Python < ' py > ,
@@ -114,9 +157,19 @@ fn ping_multiple_async<'py>(
114157 interface : Option < String > ,
115158 ipv4 : bool ,
116159 ipv6 : bool ,
160+ dns_pre_resolve : bool ,
161+ dns_resolve_timeout_ms : Option < i64 > ,
117162) -> PyResult < Bound < ' py , PyAny > > {
118163 // 创建 AsyncPinger 实例
119- let pinger = AsyncPinger :: new ( target, interval_ms, interface, ipv4, ipv6) ?;
164+ let pinger = AsyncPinger :: new (
165+ target,
166+ interval_ms,
167+ interface,
168+ ipv4,
169+ ipv6,
170+ dns_pre_resolve,
171+ dns_resolve_timeout_ms,
172+ ) ?;
120173
121174 // 执行异步 ping_multiple
122175 pinger. ping_multiple ( py, count, timeout_ms)
0 commit comments