11use std:: {
2- io:: { self , Write } ,
2+ io:: { self , Write as _ } ,
33 net:: { TcpListener , TcpStream } ,
44 time:: Duration ,
55} ;
66
77use compio_buf:: BufResult ;
88use compio_driver:: {
99 AsRawFd , Extra , OpCode , OwnedFd , Proactor , PushEntry , SharedFd , TakeBuffer ,
10- op:: {
11- Asyncify , CloseFile , CloseSocket , ReadAt , ReadManagedAt , ReadMultiAt , RecvMulti ,
12- ResultTakeBuffer ,
13- } ,
10+ op:: { Asyncify , CloseFile , CloseSocket , ReadAt , ReadManagedAt , RecvMulti , ResultTakeBuffer } ,
1411} ;
1512mod pipe2;
1613
1714#[ cfg( unix) ]
18- use compio_driver:: op:: AcceptMulti ;
15+ use compio_driver:: op:: { AcceptMulti , ReadMulti , Write } ;
1916
2017#[ cfg( unix) ]
2118#[ test]
@@ -271,16 +268,25 @@ fn managed() {
271268}
272269
273270#[ test]
271+ #[ cfg( unix) ]
274272fn read_multi ( ) {
273+ use nix:: fcntl:: OFlag ;
274+
275275 let mut driver = Proactor :: new ( ) . unwrap ( ) ;
276276
277- let fd = open_file ( & mut driver) ;
278- let fd = SharedFd :: new ( fd) ;
279- driver. attach ( fd. as_raw_fd ( ) ) . unwrap ( ) ;
277+ let mut flags = OFlag :: O_CLOEXEC ;
278+ if driver. driver_type ( ) . is_polling ( ) {
279+ flags |= OFlag :: O_NONBLOCK ;
280+ }
281+
282+ let ( r, w) = pipe2:: pipe2 ( flags) . unwrap ( ) ;
283+
284+ let op = Write :: new ( w, b"hello world" ) ;
285+ push_and_wait ( & mut driver, op) . unwrap ( ) ;
280286
281287 let pool = driver. create_buffer_pool ( 4 , 1024 ) . unwrap ( ) ;
282288
283- let op = ReadMultiAt :: new ( fd . clone ( ) , 0 , & pool, 1024 ) . unwrap ( ) ;
289+ let op = ReadMulti :: new ( r , & pool, 0 ) . unwrap ( ) ;
284290 let buffer = push_and_wait_multi ( & mut driver, op)
285291 . map ( |BufResult ( res, ( extra, op) ) | {
286292 if let Some ( op) = op {
@@ -296,10 +302,7 @@ fn read_multi() {
296302 . flatten ( )
297303 . collect :: < Vec < _ > > ( ) ;
298304
299- println ! ( "{}" , std:: str :: from_utf8( & buffer) . unwrap( ) ) ;
300-
301- let op = CloseFile :: new ( fd. try_unwrap ( ) . unwrap ( ) ) ;
302- push_and_wait ( & mut driver, op) . unwrap ( ) ;
305+ assert_eq ! ( buffer, b"hello world" ) ;
303306}
304307
305308#[ test]
0 commit comments