@@ -4,7 +4,7 @@ High-level interface to libuv's TCP functionality
4
4
5
5
import ip = net_ip;
6
6
7
- export tcp_connect_result, tcp_write_result, tcp_read_start_result;
7
+ export tcp_err_data , tcp_connect_result, tcp_write_result, tcp_read_start_result;
8
8
export connect, write;
9
9
10
10
resource tcp_socket( socket_data: @tcp_socket_data) unsafe {
@@ -26,25 +26,40 @@ resource tcp_socket(socket_data: @tcp_socket_data) unsafe {
26
26
log ( debug, "exiting dtor for tcp_socket" ) ;
27
27
}
28
28
29
+ type tcp_err_data = {
30
+ err_name: str ,
31
+ err_msg: str
32
+ } ;
33
+
34
+ iface to_tcp_err_iface {
35
+ fn to_tcp_err( ) -> tcp_err_data;
36
+ }
37
+
38
+ impl of to_tcp_err_iface for uv:: ll:: uv_err_data {
39
+ fn to_tcp_err ( ) -> tcp_err_data {
40
+ { err_name: self . err_name , err_msg: self . err_msg }
41
+ }
42
+ }
43
+
29
44
enum tcp_connect_result {
30
45
tcp_connected( tcp_socket ) ,
31
- tcp_connect_error( uv :: ll :: uv_err_data )
46
+ tcp_connect_error( tcp_err_data )
32
47
}
33
48
34
49
enum tcp_write_result {
35
50
tcp_write_success,
36
- tcp_write_error( uv :: ll :: uv_err_data )
51
+ tcp_write_error( tcp_err_data )
37
52
}
38
53
39
54
enum tcp_read_start_result {
40
55
tcp_read_start_success( comm:: port < tcp_read_result > ) ,
41
- tcp_read_start_error( uv :: ll :: uv_err_data )
56
+ tcp_read_start_error( tcp_err_data )
42
57
}
43
58
44
59
enum tcp_read_result {
45
60
tcp_read_data( [ u8 ] ) ,
46
61
tcp_read_done,
47
- tcp_read_err( uv :: ll :: uv_err_data )
62
+ tcp_read_err( tcp_err_data )
48
63
}
49
64
50
65
#[ doc="
@@ -126,7 +141,7 @@ fn connect(input_ip: ip::ip_addr, port: uint) -> tcp_connect_result unsafe {
126
141
// ip or somesuch
127
142
let err_data = uv:: ll:: get_last_err_data ( loop_ptr) ;
128
143
comm:: send ( ( * conn_data_ptr) . result_ch ,
129
- conn_failure ( err_data) ) ;
144
+ conn_failure ( err_data. to_tcp_err ( ) ) ) ;
130
145
uv:: ll:: set_data_for_uv_handle ( stream_handle_ptr,
131
146
conn_data_ptr) ;
132
147
uv:: ll:: close ( stream_handle_ptr, stream_error_close_cb) ;
@@ -139,7 +154,7 @@ fn connect(input_ip: ip::ip_addr, port: uint) -> tcp_connect_result unsafe {
139
154
// failure to create a tcp handle
140
155
let err_data = uv:: ll:: get_last_err_data ( loop_ptr) ;
141
156
comm:: send ( ( * conn_data_ptr) . result_ch ,
142
- conn_failure ( err_data) ) ;
157
+ conn_failure ( err_data. to_tcp_err ( ) ) ) ;
143
158
}
144
159
}
145
160
} ;
@@ -151,7 +166,7 @@ fn connect(input_ip: ip::ip_addr, port: uint) -> tcp_connect_result unsafe {
151
166
conn_failure ( err_data) {
152
167
comm:: recv ( closed_signal_po) ;
153
168
log ( debug, "tcp::connect - received failure on result_po" ) ;
154
- tcp_connect_error ( err_data)
169
+ tcp_connect_error ( err_data. to_tcp_err ( ) )
155
170
}
156
171
}
157
172
}
@@ -189,7 +204,7 @@ fn write(sock: tcp_socket, raw_write_data: [[u8]]) -> tcp_write_result
189
204
log( debug, "error invoking uv_write()" ) ;
190
205
let err_data = uv:: ll:: get_last_err_data ( loop_ptr) ;
191
206
comm:: send ( ( * write_data_ptr) . result_ch ,
192
- tcp_write_error ( err_data) ) ;
207
+ tcp_write_error ( err_data. to_tcp_err ( ) ) ) ;
193
208
}
194
209
}
195
210
} ;
@@ -220,7 +235,7 @@ fn read_start(sock: tcp_socket) -> tcp_read_start_result unsafe {
220
235
} ;
221
236
alt comm:: recv ( start_po) {
222
237
some ( err_data) {
223
- tcp_read_start_error ( err_data)
238
+ tcp_read_start_error ( err_data. to_tcp_err ( ) )
224
239
}
225
240
none {
226
241
tcp_read_start_success( ( * * sock) . reader_po )
@@ -230,7 +245,7 @@ fn read_start(sock: tcp_socket) -> tcp_read_start_result unsafe {
230
245
231
246
fn read_stop ( sock : tcp_socket ) -> option < uv:: ll:: uv_err_data > unsafe {
232
247
let stream_handle_ptr = ptr:: addr_of ( ( * * sock) . stream_handle ) ;
233
- let stop_po = comm:: port :: < option < uv :: ll :: uv_err_data > > ( ) ;
248
+ let stop_po = comm:: port :: < option < tcp_err_data > > ( ) ;
234
249
let stop_ch = comm:: chan ( stop_po) ;
235
250
uv:: hl:: interact ( ( * * sock) . hl_loop ) { |loop_ptr|
236
251
log ( debug, "in interact cb for tcp::read_stop" ) ;
@@ -242,7 +257,7 @@ fn read_stop(sock: tcp_socket) -> option<uv::ll::uv_err_data> unsafe {
242
257
_ {
243
258
log( debug, "failure in calling uv_read_stop" ) ;
244
259
let err_data = uv:: ll:: get_last_err_data ( loop_ptr) ;
245
- comm:: send ( stop_ch, some ( err_data) ) ;
260
+ comm:: send ( stop_ch, some ( err_data. to_tcp_err ( ) ) ) ;
246
261
}
247
262
}
248
263
} ;
0 commit comments