@@ -11,14 +11,22 @@ use crate::status::status_checker::{StatusCheckResult, StatusChecker};
1111
1212pub ( crate ) struct NetworkConnectionCheck {
1313 target_address : SocketAddr ,
14+ read_initial_response : bool ,
1415}
1516
1617#[ async_trait]
1718impl StatusChecker for NetworkConnectionCheck {
1819 fn from_options ( options : & Options ) -> anyhow:: Result < Option < Self > > {
1920 match options. socket_check_addr . to_owned ( ) {
2021 None => Ok ( None ) ,
21- Some ( target_address) => Ok ( Some ( Self { target_address } ) ) ,
22+ Some ( target_address) => {
23+ let read_initial_response =
24+ options. socket_check_read_initial_response . unwrap_or ( false ) ;
25+ Ok ( Some ( Self {
26+ target_address,
27+ read_initial_response,
28+ } ) )
29+ }
2230 }
2331 }
2432
@@ -47,6 +55,14 @@ impl StatusChecker for NetworkConnectionCheck {
4755 Ok ( StatusCheckResult :: new_failure ( failure_reason) )
4856 }
4957 Ok ( mut tcp_stream) => {
58+ if self . read_initial_response {
59+ if let Some ( result) =
60+ self . read_and_discard_response ( & mut tcp_stream) . await
61+ {
62+ return Ok ( result) ;
63+ }
64+ }
65+
5066 // connection successful
5167 if let Err ( err) = tcp_stream. write_all ( b"QUIT\n " ) . await {
5268 let failure_reason = format ! (
@@ -57,13 +73,9 @@ impl StatusChecker for NetworkConnectionCheck {
5773 }
5874
5975 // receive & discard response from server
60- let mut buffer = [ 0 ; 1024 ] ;
61- if let Err ( err) = tcp_stream. read ( & mut buffer) . await {
62- let failure_reason = format ! (
63- "error receiving response from {}: {}" ,
64- self . target_address, err
65- ) ;
66- return Ok ( StatusCheckResult :: new_failure ( failure_reason) ) ;
76+ if let Some ( result) = self . read_and_discard_response ( & mut tcp_stream) . await
77+ {
78+ return Ok ( result) ;
6779 }
6880
6981 // successful check
@@ -74,3 +86,17 @@ impl StatusChecker for NetworkConnectionCheck {
7486 }
7587 }
7688}
89+
90+ impl NetworkConnectionCheck {
91+ async fn read_and_discard_response (
92+ & self ,
93+ tcp_stream : & mut TcpStream ,
94+ ) -> Option < StatusCheckResult > {
95+ let mut buffer = [ 0 ; 1024 ] ;
96+ if let Err ( err) = tcp_stream. read ( & mut buffer) . await {
97+ let failure_reason = format ! ( "error receiving response: {}" , err) ;
98+ return Some ( StatusCheckResult :: new_failure ( failure_reason) ) ;
99+ }
100+ None
101+ }
102+ }
0 commit comments