@@ -26,6 +26,8 @@ enum MioError {
2626 Poll ( io:: Error ) ,
2727 #[ error( "mio failed to start listening on {0}, error: {1}" ) ]
2828 Listen ( SocketAddr , io:: Error ) ,
29+ #[ error( "mio failed to register the socket on {0}, error: {1}" ) ]
30+ Register ( SocketAddr , io:: Error ) ,
2931}
3032
3133impl MioError {
@@ -509,10 +511,14 @@ where
509511
510512 if let Some ( interests) = interests {
511513 let token = self . tokens . register ( Token :: Connection ( addr) ) ;
512- self . poll
513- . registry ( )
514- . reregister ( & mut connection. stream , token, interests)
515- . unwrap ( ) ;
514+ if let Err ( err) = self . poll . registry ( ) . reregister (
515+ & mut connection. stream ,
516+ token,
517+ interests,
518+ ) {
519+ MioError :: Register ( addr. sock_addr , err) . report ( ) ;
520+ return ;
521+ }
516522 }
517523 self . connections . insert ( addr, connection) ;
518524 }
@@ -547,10 +553,14 @@ where
547553 } ;
548554 if let Some ( interests) = interests {
549555 let token = self . tokens . register ( Token :: Connection ( addr) ) ;
550- self . poll
551- . registry ( )
552- . reregister ( & mut connection. stream , token, interests)
553- . unwrap ( ) ;
556+ if let Err ( err) = self . poll . registry ( ) . reregister (
557+ & mut connection. stream ,
558+ token,
559+ interests,
560+ ) {
561+ self . connections . remove ( & addr) ;
562+ self . send ( MioEvent :: ConnectionDidClose ( addr, Err ( err. to_string ( ) ) ) ) ;
563+ }
554564 }
555565 } else {
556566 self . send ( MioEvent :: OutgoingDataDidSend (
0 commit comments