@@ -8,6 +8,7 @@ use nix::{
8
8
sys:: select:: FdSet ,
9
9
sys:: socket:: { AddressFamily , SockaddrLike } ,
10
10
sys:: time:: { TimeVal , TimeValLike } ,
11
+ Error ,
11
12
} ;
12
13
use socket2:: { Domain , Protocol , SockAddr , Type } ;
13
14
use std:: io;
@@ -305,9 +306,15 @@ impl TracerSocket for Socket {
305
306
None ,
306
307
None ,
307
308
Some ( & mut TimeVal :: milliseconds ( timeout. as_millis ( ) as i64 ) ) ,
308
- )
309
- . map_err ( |err| IoError :: Other ( std:: io:: Error :: from ( err) , IoOperation :: Select ) ) ?;
310
- Ok ( readable == 1 )
309
+ ) ;
310
+ match readable {
311
+ Ok ( readable) => Ok ( readable == 1 ) ,
312
+ Err ( err) if err == Error :: EINTR => Ok ( false ) ,
313
+ Err ( err) => Err ( IoError :: Other (
314
+ std:: io:: Error :: from ( err) ,
315
+ IoOperation :: Select ,
316
+ ) ) ,
317
+ }
311
318
}
312
319
#[ instrument( skip( self ) ) ]
313
320
fn is_writable ( & self ) -> IoResult < bool > {
@@ -319,9 +326,15 @@ impl TracerSocket for Socket {
319
326
Some ( & mut write) ,
320
327
None ,
321
328
Some ( & mut TimeVal :: zero ( ) ) ,
322
- )
323
- . map_err ( |err| IoError :: Other ( std:: io:: Error :: from ( err) , IoOperation :: Select ) ) ?;
324
- Ok ( writable == 1 )
329
+ ) ;
330
+ match writable {
331
+ Ok ( writable) => Ok ( writable == 1 ) ,
332
+ Err ( err) if err == Error :: EINTR => Ok ( false ) ,
333
+ Err ( err) => Err ( IoError :: Other (
334
+ std:: io:: Error :: from ( err) ,
335
+ IoOperation :: Select ,
336
+ ) ) ,
337
+ }
325
338
}
326
339
#[ instrument( skip( self , buf) , ret) ]
327
340
fn recv_from ( & mut self , buf : & mut [ u8 ] ) -> IoResult < ( usize , Option < SocketAddr > ) > {
0 commit comments