10
10
11
11
use option:: * ;
12
12
use result:: * ;
13
-
14
- use rt:: io:: IoError ;
15
- use super :: io:: net:: ip:: IpAddr ;
16
- use super :: uv:: * ;
17
- use super :: rtio:: * ;
18
13
use ops:: Drop ;
19
14
use cell:: { Cell , empty_cell} ;
20
15
use cast:: transmute;
21
- use super :: sched:: { Scheduler , local_sched} ;
16
+
17
+ use rt:: io:: IoError ;
18
+ use rt:: io:: net:: ip:: IpAddr ;
19
+ use rt:: uv:: * ;
20
+ use rt:: rtio:: * ;
21
+ use rt:: sched:: { Scheduler , local_sched} ;
22
+ use rt:: io:: { standard_error, OtherIoError } ;
22
23
23
24
#[ cfg( test) ] use uint;
24
25
#[ cfg( test) ] use unstable:: run_in_bare_thread;
25
- #[ cfg( test) ] use super :: test:: * ;
26
+ #[ cfg( test) ] use rt :: test:: * ;
26
27
27
28
pub struct UvEventLoop {
28
29
uvio : UvIoFactory
@@ -99,11 +100,11 @@ impl IoFactory for UvIoFactory {
99
100
// Connect to an address and return a new stream
100
101
// NB: This blocks the task waiting on the connection.
101
102
// It would probably be better to return a future
102
- fn connect ( & mut self , addr : IpAddr ) -> Result < ~StreamObject , IoError > {
103
+ fn tcp_connect ( & mut self , addr : IpAddr ) -> Result < ~RtioTcpStreamObject , IoError > {
103
104
// Create a cell in the task to hold the result. We will fill
104
105
// the cell before resuming the task.
105
106
let result_cell = empty_cell ( ) ;
106
- let result_cell_ptr: * Cell < Result < ~StreamObject , IoError > > = & result_cell;
107
+ let result_cell_ptr: * Cell < Result < ~RtioTcpStreamObject , IoError > > = & result_cell;
107
108
108
109
let scheduler = local_sched:: take ( ) ;
109
110
assert ! ( scheduler. in_task_context( ) ) ;
@@ -123,7 +124,7 @@ impl IoFactory for UvIoFactory {
123
124
rtdebug ! ( "connect: in connect callback" ) ;
124
125
let maybe_stream = if status. is_none ( ) {
125
126
rtdebug ! ( "status is none" ) ;
126
- Ok ( ~UvStream ( stream_watcher) )
127
+ Ok ( ~UvTcpStream ( stream_watcher) )
127
128
} else {
128
129
rtdebug ! ( "status is some" ) ;
129
130
// XXX: Wait for close
@@ -144,7 +145,7 @@ impl IoFactory for UvIoFactory {
144
145
return result_cell. take ( ) ;
145
146
}
146
147
147
- fn bind ( & mut self , addr : IpAddr ) -> Result < ~TcpListenerObject , IoError > {
148
+ fn tcp_bind ( & mut self , addr : IpAddr ) -> Result < ~RtioTcpListenerObject , IoError > {
148
149
let mut watcher = TcpWatcher :: new ( self . uv_loop ( ) ) ;
149
150
match watcher. bind ( addr) {
150
151
Ok ( _) => Ok ( ~UvTcpListener ( watcher) ) ,
@@ -177,12 +178,12 @@ impl Drop for UvTcpListener {
177
178
}
178
179
}
179
180
180
- impl TcpListener for UvTcpListener {
181
+ impl RtioTcpListener for UvTcpListener {
181
182
182
- fn listen ( & mut self ) -> Option < ~ StreamObject > {
183
+ fn accept ( & mut self ) -> Result < ~ RtioTcpStreamObject , IoError > {
183
184
rtdebug ! ( "entering listen" ) ;
184
185
let result_cell = empty_cell ( ) ;
185
- let result_cell_ptr: * Cell < Option < ~ StreamObject > > = & result_cell;
186
+ let result_cell_ptr: * Cell < Result < ~ RtioTcpStreamObject , IoError > > = & result_cell;
186
187
187
188
let server_tcp_watcher = self . watcher ( ) ;
188
189
@@ -199,9 +200,9 @@ impl TcpListener for UvTcpListener {
199
200
let client_tcp_watcher = TcpWatcher :: new ( & mut loop_) . as_stream ( ) ;
200
201
// XXX: Needs to be surfaced in interface
201
202
server_stream_watcher. accept ( client_tcp_watcher) ;
202
- Some ( ~ UvStream :: new ( client_tcp_watcher) )
203
+ Ok ( ~ UvTcpStream :: new ( client_tcp_watcher) )
203
204
} else {
204
- None
205
+ Err ( standard_error ( OtherIoError ) )
205
206
} ;
206
207
207
208
unsafe { ( * result_cell_ptr) . put_back ( maybe_stream) ; }
@@ -218,15 +219,15 @@ impl TcpListener for UvTcpListener {
218
219
}
219
220
}
220
221
221
- pub struct UvStream ( StreamWatcher ) ;
222
+ pub struct UvTcpStream ( StreamWatcher ) ;
222
223
223
- impl UvStream {
224
- fn new ( watcher : StreamWatcher ) -> UvStream {
225
- UvStream ( watcher)
224
+ impl UvTcpStream {
225
+ fn new ( watcher : StreamWatcher ) -> UvTcpStream {
226
+ UvTcpStream ( watcher)
226
227
}
227
228
228
229
fn watcher ( & self ) -> StreamWatcher {
229
- match self { & UvStream ( w) => w }
230
+ match self { & UvTcpStream ( w) => w }
230
231
}
231
232
232
233
// XXX: finalize isn't working for ~UvStream???
@@ -236,17 +237,17 @@ impl UvStream {
236
237
}
237
238
}
238
239
239
- impl Drop for UvStream {
240
+ impl Drop for UvTcpStream {
240
241
fn finalize ( & self ) {
241
242
rtdebug ! ( "closing stream" ) ;
242
243
//self.watcher().close(||());
243
244
}
244
245
}
245
246
246
- impl Stream for UvStream {
247
- fn read ( & mut self , buf : & mut [ u8 ] ) -> Result < uint , ( ) > {
247
+ impl RtioTcpStream for UvTcpStream {
248
+ fn read ( & mut self , buf : & mut [ u8 ] ) -> Result < uint , IoError > {
248
249
let result_cell = empty_cell ( ) ;
249
- let result_cell_ptr: * Cell < Result < uint , ( ) > > = & result_cell;
250
+ let result_cell_ptr: * Cell < Result < uint , IoError > > = & result_cell;
250
251
251
252
let scheduler = local_sched:: take ( ) ;
252
253
assert ! ( scheduler. in_task_context( ) ) ;
@@ -277,7 +278,7 @@ impl Stream for UvStream {
277
278
assert ! ( nread >= 0 ) ;
278
279
Ok ( nread as uint )
279
280
} else {
280
- Err ( ( ) )
281
+ Err ( standard_error ( OtherIoError ) )
281
282
} ;
282
283
283
284
unsafe { ( * result_cell_ptr) . put_back ( result) ; }
@@ -291,9 +292,9 @@ impl Stream for UvStream {
291
292
return result_cell. take ( ) ;
292
293
}
293
294
294
- fn write ( & mut self , buf : & [ u8 ] ) -> Result < ( ) , ( ) > {
295
+ fn write ( & mut self , buf : & [ u8 ] ) -> Result < ( ) , IoError > {
295
296
let result_cell = empty_cell ( ) ;
296
- let result_cell_ptr: * Cell < Result < ( ) , ( ) > > = & result_cell;
297
+ let result_cell_ptr: * Cell < Result < ( ) , IoError > > = & result_cell;
297
298
let scheduler = local_sched:: take ( ) ;
298
299
assert ! ( scheduler. in_task_context( ) ) ;
299
300
let watcher = self . watcher ( ) ;
@@ -308,7 +309,7 @@ impl Stream for UvStream {
308
309
let result = if status. is_none ( ) {
309
310
Ok ( ( ) )
310
311
} else {
311
- Err ( ( ) )
312
+ Err ( standard_error ( OtherIoError ) )
312
313
} ;
313
314
314
315
unsafe { ( * result_cell_ptr) . put_back ( result) ; }
@@ -328,7 +329,7 @@ fn test_simple_io_no_connect() {
328
329
do run_in_newsched_task {
329
330
let io = unsafe { local_sched:: unsafe_borrow_io ( ) } ;
330
331
let addr = next_test_ip4 ( ) ;
331
- let maybe_chan = io. connect ( addr) ;
332
+ let maybe_chan = io. tcp_connect ( addr) ;
332
333
assert ! ( maybe_chan. is_err( ) ) ;
333
334
}
334
335
}
@@ -342,8 +343,8 @@ fn test_simple_tcp_server_and_client() {
342
343
do spawntask_immediately {
343
344
unsafe {
344
345
let io = local_sched:: unsafe_borrow_io ( ) ;
345
- let mut listener = io. bind ( addr) . unwrap ( ) ;
346
- let mut stream = listener. listen ( ) . unwrap ( ) ;
346
+ let mut listener = io. tcp_bind ( addr) . unwrap ( ) ;
347
+ let mut stream = listener. accept ( ) . unwrap ( ) ;
347
348
let mut buf = [ 0 , .. 2048 ] ;
348
349
let nread = stream. read ( buf) . unwrap ( ) ;
349
350
assert ! ( nread == 8 ) ;
@@ -359,7 +360,7 @@ fn test_simple_tcp_server_and_client() {
359
360
do spawntask_immediately {
360
361
unsafe {
361
362
let io = local_sched:: unsafe_borrow_io ( ) ;
362
- let mut stream = io. connect ( addr) . unwrap ( ) ;
363
+ let mut stream = io. tcp_connect ( addr) . unwrap ( ) ;
363
364
stream. write( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ) ;
364
365
stream. close( ) ;
365
366
}
@@ -374,8 +375,8 @@ fn test_read_and_block() {
374
375
375
376
do spawntask_immediately {
376
377
let io = unsafe { local_sched:: unsafe_borrow_io ( ) } ;
377
- let mut listener = io. bind ( addr) . unwrap ( ) ;
378
- let mut stream = listener. listen ( ) . unwrap ( ) ;
378
+ let mut listener = io. tcp_bind ( addr) . unwrap ( ) ;
379
+ let mut stream = listener. accept ( ) . unwrap ( ) ;
379
380
let mut buf = [ 0 , .. 2048 ] ;
380
381
381
382
let expected = 32 ;
@@ -412,7 +413,7 @@ fn test_read_and_block() {
412
413
413
414
do spawntask_immediately {
414
415
let io = unsafe { local_sched:: unsafe_borrow_io ( ) } ;
415
- let mut stream = io. connect ( addr) . unwrap ( ) ;
416
+ let mut stream = io. tcp_connect ( addr) . unwrap ( ) ;
416
417
stream. write ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ) ;
417
418
stream. write ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ) ;
418
419
stream. write ( [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 ] ) ;
@@ -432,8 +433,8 @@ fn test_read_read_read() {
432
433
do spawntask_immediately {
433
434
unsafe {
434
435
let io = local_sched:: unsafe_borrow_io ( ) ;
435
- let mut listener = io. bind ( addr) . unwrap ( ) ;
436
- let mut stream = listener. listen ( ) . unwrap ( ) ;
436
+ let mut listener = io. tcp_bind ( addr) . unwrap ( ) ;
437
+ let mut stream = listener. accept ( ) . unwrap ( ) ;
437
438
let mut buf = [ 1 , .. 2048 ] ;
438
439
let mut total_bytes_written = 0 ;
439
440
while total_bytes_written < MAX {
@@ -447,7 +448,7 @@ fn test_read_read_read() {
447
448
448
449
do spawntask_immediately {
449
450
let io = unsafe { local_sched:: unsafe_borrow_io ( ) } ;
450
- let mut stream = io. connect ( addr) . unwrap ( ) ;
451
+ let mut stream = io. tcp_connect ( addr) . unwrap ( ) ;
451
452
let mut buf = [ 0 , .. 2048 ] ;
452
453
let mut total_bytes_read = 0 ;
453
454
while total_bytes_read < MAX {
0 commit comments