@@ -208,17 +208,7 @@ impl Accept {
208
208
}
209
209
Some ( WakerInterest :: Pause ) => {
210
210
drop ( guard) ;
211
- sockets. iter_mut ( ) . for_each ( |( _, info) | {
212
- match self . deregister ( info) {
213
- Ok ( _) => info ! (
214
- "Paused accepting connections on {}" ,
215
- info. addr
216
- ) ,
217
- Err ( e) => {
218
- error ! ( "Can not deregister server socket {}" , e)
219
- }
220
- }
221
- } ) ;
211
+ self . deregister_all ( & mut sockets) ;
222
212
}
223
213
Some ( WakerInterest :: Resume ) => {
224
214
drop ( guard) ;
@@ -295,10 +285,18 @@ impl Accept {
295
285
self . poll . registry ( ) . deregister ( & mut info. lst )
296
286
}
297
287
288
+ fn deregister_logged ( & self , info : & mut ServerSocketInfo ) {
289
+ match self . deregister ( info) {
290
+ Ok ( _) => info ! ( "Paused accepting connections on {}" , info. addr) ,
291
+ Err ( e) => {
292
+ error ! ( "Can not deregister server socket {}" , e)
293
+ }
294
+ }
295
+ }
296
+
298
297
fn deregister_all ( & self , sockets : & mut Slab < ServerSocketInfo > ) {
299
298
sockets. iter_mut ( ) . for_each ( |( _, info) | {
300
- info ! ( "Accepting connections on {} has been paused" , info. addr) ;
301
- let _ = self . deregister ( info) ;
299
+ self . deregister_logged ( info) ;
302
300
} ) ;
303
301
}
304
302
@@ -388,43 +386,42 @@ impl Accept {
388
386
389
387
fn accept ( & mut self , sockets : & mut Slab < ServerSocketInfo > , token : usize ) {
390
388
loop {
391
- let msg = if let Some ( info) = sockets. get_mut ( token) {
392
- match info. lst . accept ( ) {
393
- Ok ( Some ( ( io, addr) ) ) => Conn {
389
+ let info = sockets
390
+ . get_mut ( token)
391
+ . expect ( "ServerSocketInfo is removed from Slab" ) ;
392
+
393
+ match info. lst . accept ( ) {
394
+ Ok ( ( io, addr) ) => {
395
+ let msg = Conn {
394
396
io,
395
397
token : info. token ,
396
398
peer : Some ( addr) ,
397
- } ,
398
- Ok ( None ) => return ,
399
- Err ( ref e) if e. kind ( ) == io:: ErrorKind :: WouldBlock => return ,
400
- Err ( ref e) if connection_error ( e) => continue ,
401
- Err ( e) => {
402
- // deregister listener temporary
403
- error ! ( "Error accepting connection: {}" , e) ;
404
- if let Err ( err) = self . deregister ( info) {
405
- error ! ( "Can not deregister server socket {}" , err) ;
406
- }
407
-
408
- // sleep after error. write the timeout to socket info as later
409
- // the poll would need it mark which socket and when it's
410
- // listener should be registered
411
- info. timeout = Some ( Instant :: now ( ) + Duration :: from_millis ( 500 ) ) ;
412
-
413
- // after the sleep a Timer interest is sent to Accept Poll
414
- let waker = self . waker . clone ( ) ;
415
- System :: current ( ) . arbiter ( ) . spawn ( async move {
416
- sleep ( Duration :: from_millis ( 510 ) ) . await ;
417
- waker. wake ( WakerInterest :: Timer ) ;
418
- } ) ;
419
-
420
- return ;
421
- }
399
+ } ;
400
+ self . accept_one ( sockets, msg) ;
401
+ }
402
+ Err ( ref e) if e. kind ( ) == io:: ErrorKind :: WouldBlock => return ,
403
+ Err ( ref e) if connection_error ( e) => continue ,
404
+ Err ( e) => {
405
+ error ! ( "Error accepting connection: {}" , e) ;
406
+
407
+ // deregister listener temporary
408
+ self . deregister_logged ( info) ;
409
+
410
+ // sleep after error. write the timeout to socket info as later
411
+ // the poll would need it mark which socket and when it's
412
+ // listener should be registered
413
+ info. timeout = Some ( Instant :: now ( ) + Duration :: from_millis ( 500 ) ) ;
414
+
415
+ // after the sleep a Timer interest is sent to Accept Poll
416
+ let waker = self . waker . clone ( ) ;
417
+ System :: current ( ) . arbiter ( ) . spawn ( async move {
418
+ sleep ( Duration :: from_millis ( 510 ) ) . await ;
419
+ waker. wake ( WakerInterest :: Timer ) ;
420
+ } ) ;
421
+
422
+ return ;
422
423
}
423
- } else {
424
- return ;
425
424
} ;
426
-
427
- self . accept_one ( sockets, msg) ;
428
425
}
429
426
}
430
427
}
0 commit comments