@@ -2,54 +2,56 @@ use super::{Available, HUP, NONE, READ, WRITE};
22
33use nix:: sys:: epoll:: * ;
44use std:: default:: Default ;
5- use std:: os:: unix:: io:: AsRawFd ;
6- use std:: os:: unix:: io:: RawFd ;
5+ use std:: os:: fd:: AsFd ;
76use std:: slice;
87
98pub type Token = u64 ;
109
1110pub struct PollHandle {
12- epoll_fd : RawFd ,
11+ epoll : Epoll ,
1312}
1413
1514impl PollHandle {
16- pub fn schedule_read < Fd : AsRawFd > ( & self , file : & Fd , token : Token ) {
17- self . schedule_read_rawfd ( file. as_raw_fd ( ) , token) ;
18- }
15+ // pub fn schedule_read<Fd: AsFd >(&self, file: &Fd, token: Token) {
16+ // self.schedule_read_rawfd(file, token).expect("schedule_read failed" );
17+ // }
1918
20- pub fn schedule_read_rawfd ( & self , fd : RawFd , token : Token ) {
21- let mut event = EpollEvent :: new (
19+ pub fn schedule_read < Fd : AsFd > ( & self , fd : & Fd , token : Token ) {
20+ let event = EpollEvent :: new (
2221 EpollFlags :: EPOLLIN | EpollFlags :: EPOLLET | EpollFlags :: EPOLLONESHOT ,
2322 token,
2423 ) ;
25- epoll_ctl ( self . epoll_fd , EpollOp :: EpollCtlMod , fd, & mut event) . unwrap ( ) ;
24+ // epoll_ctl(self.epoll_fd, EpollOp::EpollCtlMod, fd, &mut event).unwrap();
25+ self . epoll . add ( fd, event) . expect ( "Epoll::add failed" ) ;
2626 }
2727
28- pub fn schedule_write < Fd : AsRawFd > ( & self , file : & Fd , token : Token ) {
29- self . schedule_write_rawfd ( file. as_raw_fd ( ) , token) ;
30- }
28+ // pub fn schedule_write<Fd: AsRawFd>(&self, file: &Fd, token: Token) {
29+ // self.schedule_write_rawfd(file.as_raw_fd(), token);
30+ // }
3131
32- pub fn schedule_write_rawfd ( & self , fd : RawFd , token : Token ) {
32+ pub fn schedule_write < Fd : AsFd > ( & self , file : & Fd , token : Token ) {
3333 let mut event = EpollEvent :: new (
3434 EpollFlags :: EPOLLOUT | EpollFlags :: EPOLLET | EpollFlags :: EPOLLONESHOT ,
3535 token,
3636 ) ;
37- epoll_ctl ( self . epoll_fd , EpollOp :: EpollCtlMod , fd, & mut event) . unwrap ( ) ;
37+ //epoll_ctl(self.epoll_fd, EpollOp::EpollCtlMod, fd, &mut event).unwrap();
38+ self . epoll . modify ( file, & mut event) . expect ( "Epoll.modify failed" ) ;
3839 }
3940
4041 /// This assumes file is already set to be non-blocking. This must also be called only the first time round.
41- pub fn new_io_port < Fd : AsRawFd > ( & self , file : & Fd , token : Token ) {
42- self . new_io_fd ( file. as_raw_fd ( ) , token) ;
42+ pub fn new_io_port < Fd : AsFd > ( & self , file : & Fd , token : Token ) {
43+ self . new_io_fd ( file, token) ;
4344 }
4445
45- pub fn new_io_fd ( & self , fd : RawFd , token : Token ) {
46- let mut event = EpollEvent :: new ( EpollFlags :: EPOLLET | EpollFlags :: EPOLLONESHOT , token) ;
47- epoll_ctl ( self . epoll_fd , EpollOp :: EpollCtlAdd , fd, & mut event) . unwrap ( ) ;
46+ pub fn new_io_fd < Fd : AsFd > ( & self , fd : Fd , token : Token ) {
47+ let event = EpollEvent :: new ( EpollFlags :: EPOLLET | EpollFlags :: EPOLLONESHOT , token) ;
48+ //epoll_ctl(self.epoll_fd, EpollOp::EpollCtlAdd, fd, &mut event).unwrap();
49+ self . epoll . add ( fd, event) . expect ( "Epoll.add failed" ) ;
4850 }
4951}
5052
5153pub struct PollScheduler {
52- epoll_fd : RawFd ,
54+ poll_handle : PollHandle ,
5355 ready_tokens : Vec < EpollEvent > ,
5456 events : usize ,
5557}
@@ -61,15 +63,15 @@ impl Default for PollScheduler {
6163}
6264
6365impl PollScheduler {
64- pub fn new_poll_handle ( & self ) -> PollHandle {
65- PollHandle {
66- epoll_fd : self . epoll_fd ,
67- }
66+ pub fn poll_handle ( & self ) -> & PollHandle {
67+ & self . poll_handle
6868 }
6969
7070 pub fn new ( ) -> PollScheduler {
7171 PollScheduler {
72- epoll_fd : epoll_create ( ) . unwrap ( ) ,
72+ poll_handle : PollHandle {
73+ epoll : Epoll :: new ( EpollCreateFlags :: empty ( ) ) . expect ( "Epoll::new failed" ) ,
74+ } , // epoll_create().unwrap(),
7375 ready_tokens : Vec :: with_capacity ( 32 ) ,
7476 events : 0 ,
7577 }
@@ -97,7 +99,8 @@ impl PollScheduler {
9799 } else {
98100 let dest =
99101 unsafe { slice:: from_raw_parts_mut ( self . ready_tokens . as_mut_ptr ( ) , self . ready_tokens . capacity ( ) ) } ;
100- self . events = epoll_wait ( self . epoll_fd , dest, 0 ) . unwrap ( ) ;
102+ // self.events = epoll_wait(self.epoll_fd, dest, 0).unwrap();
103+ self . events = self . poll_handle . epoll . wait ( dest, 0 ) . expect ( "Epoll::wait failed" ) ;
101104 unsafe { self . ready_tokens . set_len ( self . events ) } ;
102105 self . ready_tokens . pop ( )
103106 }
0 commit comments