@@ -20,7 +20,7 @@ const INITIAL_CONGESTION_TIMEOUT: u64 = 1000; // one second
20
20
const MIN_CONGESTION_TIMEOUT : u64 = 500 ; // 500 ms
21
21
const MAX_CONGESTION_TIMEOUT : u64 = 60_000 ; // one minute
22
22
const BASE_HISTORY : usize = 10 ; // base delays history size
23
- const MAX_CONNECT_TRIES : u16 = 5 ;
23
+ const MAX_TIMEOUTS : u16 = 5 ;
24
24
25
25
#[ derive( Debug ) ]
26
26
pub enum SocketError {
@@ -255,7 +255,7 @@ impl UtpSocket {
255
255
Ok ( ( read, src) ) => { socket. connected_to = src; len = read; break ; } ,
256
256
Err ( ref e) if ( e. kind ( ) == ErrorKind :: WouldBlock ||
257
257
e. kind ( ) == ErrorKind :: TimedOut ) => {
258
- if try == MAX_CONNECT_TRIES {
258
+ if try == MAX_TIMEOUTS {
259
259
return Err ( Error :: from ( SocketError :: ConnectionTimedOut ) ) ;
260
260
}
261
261
debug ! ( "Timed out, retrying" ) ;
@@ -327,6 +327,7 @@ impl UtpSocket {
327
327
return Err ( Error :: from ( SocketError :: ConnectionReset ) ) ;
328
328
}
329
329
330
+ let mut timeouts = 0 ;
330
331
loop {
331
332
// A closed socket with no pending data can only "read" 0 new bytes.
332
333
if self . state == SocketState :: Closed {
@@ -336,6 +337,12 @@ impl UtpSocket {
336
337
match self . recv ( buf) {
337
338
Ok ( ( 0 , _src) ) => continue ,
338
339
Ok ( x) => return Ok ( x) ,
340
+ Err ( ref e) if e. kind ( ) == ErrorKind :: TimedOut => {
341
+ timeouts += 1 ;
342
+ if timeouts == MAX_TIMEOUTS {
343
+ return Err ( Error :: from ( SocketError :: ConnectionTimedOut ) ) ;
344
+ }
345
+ }
339
346
Err ( e) => return Err ( e)
340
347
}
341
348
}
@@ -355,7 +362,7 @@ impl UtpSocket {
355
362
self . congestion_timeout = self . congestion_timeout * 2 ;
356
363
self . cwnd = MSS ;
357
364
self . send_fast_resend_request ( ) ;
358
- return Ok ( ( 0 , self . connected_to ) ) ;
365
+ return Err ( Error :: from ( SocketError :: ConnectionTimedOut ) ) ;
359
366
} ,
360
367
Ok ( x) => x,
361
368
Err ( e) => return Err ( e) ,
0 commit comments