@@ -35,40 +35,49 @@ Encapsulates an open TCP/IP connection through libuv
35
35
underlying libuv data structures when it goes out of scope. This is the
36
36
data structure that is used for read/write operations over a TCP stream.
37
37
" ]
38
- resource tcp_socket( socket_data: @tcp_socket_data)
38
+ class tcp_socket {
39
+ let socket_data : @tcp_socket_data;
40
+ new ( socket_data: @tcp_socket_data) { self . socket_data = socket_data; }
41
+ drop {
39
42
unsafe {
40
- let closed_po = comm:: port :: < ( ) > ( ) ;
41
- let closed_ch = comm:: chan ( closed_po) ;
42
- let close_data = {
43
- closed_ch: closed_ch
44
- } ;
45
- let close_data_ptr = ptr:: addr_of ( close_data) ;
46
- let stream_handle_ptr = ( * socket_data) . stream_handle_ptr ;
47
- iotask:: interact ( ( * socket_data) . iotask ) { |loop_ptr|
48
- log ( debug, #fmt ( "interact dtor for tcp_socket stream %? loop %?" ,
43
+ let closed_po = comm:: port :: < ( ) > ( ) ;
44
+ let closed_ch = comm:: chan ( closed_po) ;
45
+ let close_data = {
46
+ closed_ch: closed_ch
47
+ } ;
48
+ let close_data_ptr = ptr:: addr_of ( close_data) ;
49
+ let stream_handle_ptr = ( * ( self . socket_data ) ) . stream_handle_ptr ;
50
+ iotask:: interact ( ( * ( self . socket_data ) ) . iotask ) { |loop_ptr|
51
+ log ( debug, #fmt ( "interact dtor for tcp_socket stream %? loop %?" ,
49
52
stream_handle_ptr, loop_ptr) ) ;
50
- uv:: ll:: set_data_for_uv_handle ( stream_handle_ptr,
53
+ uv:: ll:: set_data_for_uv_handle ( stream_handle_ptr,
51
54
close_data_ptr) ;
52
- uv:: ll:: close ( stream_handle_ptr, tcp_socket_dtor_close_cb) ;
53
- } ;
54
- comm:: recv ( closed_po) ;
55
- log ( debug, #fmt ( "about to free socket_data at %?" , socket_data) ) ;
56
- rustrt:: rust_uv_current_kernel_free ( stream_handle_ptr
57
- as * libc:: c_void ) ;
58
- log ( debug, "exiting dtor for tcp_socket" ) ;
55
+ uv:: ll:: close ( stream_handle_ptr, tcp_socket_dtor_close_cb) ;
56
+ } ;
57
+ comm:: recv ( closed_po) ;
58
+ log ( debug, #fmt ( "about to free socket_data at %?" , self . socket_data ) ) ;
59
+ rustrt:: rust_uv_current_kernel_free ( stream_handle_ptr
60
+ as * libc:: c_void ) ;
61
+ log ( debug, "exiting dtor for tcp_socket" ) ;
62
+ }
63
+ }
59
64
}
60
65
61
- resource tcp_conn_port ( conn_data: @tcp_conn_port_data) unsafe {
62
- let conn_data_ptr = ptr:: addr_of ( * conn_data) ;
66
+ class tcp_conn_port {
67
+ let conn_data : @tcp_conn_port_data;
68
+ new ( conn_data: @tcp_conn_port_data) { self . conn_data = conn_data; }
69
+ drop unsafe {
70
+ let conn_data_ptr = ptr:: addr_of ( * ( self . conn_data ) ) ;
63
71
let server_stream_ptr = ptr:: addr_of ( ( * conn_data_ptr) . server_stream ) ;
64
- let stream_closed_po = ( * conn_data) . stream_closed_po ;
72
+ let stream_closed_po = ( * ( self . conn_data ) ) . stream_closed_po ;
65
73
let iotask = ( * conn_data_ptr) . iotask ;
66
74
iotask:: interact ( iotask) { |loop_ptr|
67
75
log ( debug, #fmt ( "dtor for tcp_conn_port loop: %?" ,
68
76
loop_ptr) ) ;
69
77
uv:: ll:: close ( server_stream_ptr, tcp_nl_close_cb) ;
70
78
}
71
79
comm:: recv ( stream_closed_po) ;
80
+ }
72
81
}
73
82
74
83
#[ doc="
@@ -207,7 +216,7 @@ value as the `err` variant
207
216
" ]
208
217
fn write ( sock : tcp_socket , raw_write_data : [ u8 ] )
209
218
-> result:: result < ( ) , tcp_err_data > unsafe {
210
- let socket_data_ptr = ptr:: addr_of ( * * sock) ;
219
+ let socket_data_ptr = ptr:: addr_of ( * ( sock. socket_data ) ) ;
211
220
write_common_impl ( socket_data_ptr, raw_write_data)
212
221
}
213
222
@@ -240,7 +249,7 @@ value as the `err` variant
240
249
" ]
241
250
fn write_future ( sock : tcp_socket , raw_write_data : [ u8 ] )
242
251
-> future:: future < result:: result < ( ) , tcp_err_data > > unsafe {
243
- let socket_data_ptr = ptr:: addr_of ( * * sock) ;
252
+ let socket_data_ptr = ptr:: addr_of ( * ( sock. socket_data ) ) ;
244
253
future:: spawn { ||
245
254
write_common_impl ( socket_data_ptr, raw_write_data)
246
255
}
@@ -262,7 +271,7 @@ on) from until `read_stop` is called, or a `tcp_err_data` record
262
271
fn read_start ( sock : tcp_socket )
263
272
-> result:: result < comm:: port <
264
273
result:: result < [ u8 ] , tcp_err_data > > , tcp_err_data > unsafe {
265
- let socket_data = ptr:: addr_of ( * * sock) ;
274
+ let socket_data = ptr:: addr_of ( * ( sock. socket_data ) ) ;
266
275
read_start_common_impl ( socket_data)
267
276
}
268
277
@@ -275,7 +284,7 @@ Stop reading from an open TCP connection; used with `read_start`
275
284
" ]
276
285
fn read_stop ( sock : tcp_socket ) ->
277
286
result:: result < ( ) , tcp_err_data > unsafe {
278
- let socket_data = ptr:: addr_of ( * * sock) ;
287
+ let socket_data = ptr:: addr_of ( * ( sock. socket_data ) ) ;
279
288
read_stop_common_impl ( socket_data)
280
289
}
281
290
@@ -295,7 +304,7 @@ read attempt. Pass `0u` to wait indefinitely
295
304
" ]
296
305
fn read ( sock : tcp_socket , timeout_msecs : uint )
297
306
-> result:: result < [ u8 ] , tcp_err_data > {
298
- let socket_data = ptr:: addr_of ( * * sock) ;
307
+ let socket_data = ptr:: addr_of ( * ( sock. socket_data ) ) ;
299
308
read_common_impl ( socket_data, timeout_msecs)
300
309
}
301
310
@@ -329,7 +338,7 @@ read attempt. Pass `0u` to wait indefinitely
329
338
" ]
330
339
fn read_future ( sock : tcp_socket , timeout_msecs : uint )
331
340
-> future:: future < result:: result < [ u8 ] , tcp_err_data > > {
332
- let socket_data = ptr:: addr_of ( * * sock) ;
341
+ let socket_data = ptr:: addr_of ( * ( sock. socket_data ) ) ;
333
342
future:: spawn { ||
334
343
read_common_impl ( socket_data, timeout_msecs)
335
344
}
@@ -444,8 +453,8 @@ variant
444
453
" ]
445
454
fn conn_recv ( server_port : tcp_conn_port )
446
455
-> result:: result < tcp_socket , tcp_err_data > {
447
- let new_conn_po = ( * * server_port) . new_conn_po ;
448
- let iotask = ( * * server_port) . iotask ;
456
+ let new_conn_po = ( * ( server_port. conn_data ) ) . new_conn_po ;
457
+ let iotask = ( * ( server_port. conn_data ) ) . iotask ;
449
458
let new_conn_result = comm:: recv ( new_conn_po) ;
450
459
alt new_conn_result {
451
460
ok( client_stream_ptr) {
@@ -475,8 +484,8 @@ once a new connection is recv'd. Its parameter:
475
484
" ]
476
485
fn conn_recv_spawn ( server_port : tcp_conn_port ,
477
486
+cb : fn ~( result:: result < tcp_socket , tcp_err_data > ) ) {
478
- let new_conn_po = ( * * server_port) . new_conn_po ;
479
- let iotask = ( * * server_port) . iotask ;
487
+ let new_conn_po = ( * ( server_port. conn_data ) ) . new_conn_po ;
488
+ let iotask = ( * ( server_port. conn_data ) ) . iotask ;
480
489
let new_conn_result = comm:: recv ( new_conn_po) ;
481
490
task:: spawn { ||
482
491
let sock_create_result = alt new_conn_result {
@@ -507,7 +516,7 @@ connection
507
516
none.
508
517
" ]
509
518
fn conn_peek ( server_port : tcp_conn_port ) -> bool {
510
- let new_conn_po = ( * * server_port) . new_conn_po ;
519
+ let new_conn_po = ( * ( server_port. conn_data ) ) . new_conn_po ;
511
520
comm:: peek ( new_conn_po)
512
521
}
513
522
0 commit comments