@@ -17,7 +17,7 @@ mod handshake_handler;
1717#[ cfg( test) ]
1818mod tests;
1919
20- use std:: { sync:: Arc , time :: Duration } ;
20+ use std:: sync:: Arc ;
2121
2222use tokio:: {
2323 sync:: mpsc:: { self , unbounded_channel} ,
@@ -232,6 +232,7 @@ where
232232 let ( writer_cmd_sender, writer_cmd_receiver) = unbounded_channel ( ) ;
233233 let ( writer_event_sender, mut writer_event_receiver) = unbounded_channel ( ) ;
234234 let writer_join_handle = spawn_writer (
235+ Arc :: clone ( & p2p_config) ,
235236 peer_id,
236237 common_protocol_version. 0 ,
237238 socket_writer,
@@ -332,16 +333,19 @@ where
332333 } ) ;
333334 match send_result {
334335 Ok ( ( ) ) => {
335- let disconnect_result = tokio:: time:: timeout ( DISCONNECTION_TIMEOUT , async {
336- match writer_event_receiver. recv ( ) . await {
337- Some ( WriterEvent :: WriterClosed ( result) ) => {
338- log:: debug!( "Socket writer closing confirmed with result: {result:?}" ) ;
339- } ,
340- None => {
341- log:: debug!( "Socket writer task already closed when waiting for disconnection" ) ;
342- } ,
336+ let disconnect_result = tokio:: time:: timeout (
337+ * p2p_config. backend_timeouts . disconnection_timeout ,
338+ async {
339+ match writer_event_receiver. recv ( ) . await {
340+ Some ( WriterEvent :: WriterClosed ( result) ) => {
341+ log:: debug!( "Socket writer closing confirmed with result: {result:?}" ) ;
342+ } ,
343+ None => {
344+ log:: debug!( "Socket writer task already closed when waiting for disconnection" ) ;
345+ } ,
346+ }
343347 }
344- } ) . await ;
348+ ) . await ;
345349
346350 match disconnect_result {
347351 Ok ( ( ) ) => { }
@@ -377,9 +381,6 @@ where
377381 }
378382}
379383
380- const DISCONNECTION_TIMEOUT : Duration = Duration :: from_secs ( 10 ) ;
381- const SOCKET_WRITE_TIMEOUT : Duration = Duration :: from_secs ( 60 ) ;
382-
383384async fn maybe_send_will_disconnect < S : PeerStream > (
384385 reason : Option < DisconnectionReason > ,
385386 peer_protocol_version : ProtocolVersion ,
@@ -409,6 +410,7 @@ enum WriterEvent {
409410}
410411
411412fn spawn_writer < S : PeerStream + ' static > (
413+ p2p_config : Arc < P2pConfig > ,
412414 peer_id : PeerId ,
413415 common_protocol_version : SupportedProtocolVersion ,
414416 socket_writer : MessageWriter < S , Message > ,
@@ -417,8 +419,13 @@ fn spawn_writer<S: PeerStream + 'static>(
417419) -> JoinHandle < ( ) > {
418420 tokio_spawn_in_current_tracing_span (
419421 async move {
420- let writer_result =
421- writer_loop ( common_protocol_version, socket_writer, cmd_receiver) . await ;
422+ let writer_result = writer_loop (
423+ & p2p_config,
424+ common_protocol_version,
425+ socket_writer,
426+ cmd_receiver,
427+ )
428+ . await ;
422429
423430 if let Err ( _) = event_sender. send ( WriterEvent :: WriterClosed ( writer_result) ) {
424431 log:: debug!( "Peer task already closed" ) ;
@@ -429,6 +436,7 @@ fn spawn_writer<S: PeerStream + 'static>(
429436}
430437
431438async fn writer_loop < S : PeerStream > (
439+ p2p_config : & P2pConfig ,
432440 common_protocol_version : SupportedProtocolVersion ,
433441 mut socket_writer : MessageWriter < S , Message > ,
434442 mut cmd_receiver : mpsc:: UnboundedReceiver < WriterCommand > ,
@@ -442,11 +450,12 @@ async fn writer_loop<S: PeerStream>(
442450 message. encoded_size( )
443451 ) ;
444452
445- tokio:: time:: timeout ( SOCKET_WRITE_TIMEOUT , socket_writer. send ( * message) )
446- . await
447- . map_err ( |_| {
448- P2pError :: NetworkingError ( NetworkingError :: SocketWriteTimedOut )
449- } ) ??;
453+ tokio:: time:: timeout (
454+ * p2p_config. backend_timeouts . socket_write_timeout ,
455+ socket_writer. send ( * message) ,
456+ )
457+ . await
458+ . map_err ( |_| P2pError :: NetworkingError ( NetworkingError :: SocketWriteTimedOut ) ) ??;
450459 }
451460 WriterCommand :: Disconnect { reason } => {
452461 log:: debug!( "Disconnection requested, the reason is {:?}" , reason) ;
0 commit comments