diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-01-25 00:52:50 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-01-29 19:54:55 -0800 |
| commit | da4b3768971c7c025ba8a85ebf59572fd752dfb6 (patch) | |
| tree | e47abf6553bffeaaa35d682f74f0cc42df5e913e /src/libstd/net_ip.rs | |
| parent | 87acde8826af4dfd8391cbccc48526381796dab3 (diff) | |
| download | rust-da4b3768971c7c025ba8a85ebf59572fd752dfb6.tar.gz rust-da4b3768971c7c025ba8a85ebf59572fd752dfb6.zip | |
std: Stop using oldcomm
Diffstat (limited to 'src/libstd/net_ip.rs')
| -rw-r--r-- | src/libstd/net_ip.rs | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index 72e58cbd5d3..839d0d23a61 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -12,8 +12,8 @@ #[forbid(deprecated_mode)]; use core::libc; -use core::oldcomm; use core::prelude::*; +use core::pipes::{stream, SharedChan}; use core::ptr; use core::result; use core::str; @@ -113,40 +113,40 @@ enum IpGetAddrErr { * A `result<~[ip_addr], ip_get_addr_err>` instance that will contain * a vector of `ip_addr` results, in the case of success, or an error * object in the case of failure - */ +*/ pub fn get_addr(node: &str, iotask: &iotask) - -> result::Result<~[IpAddr], IpGetAddrErr> { - do oldcomm::listen |output_ch| { - do str::as_buf(node) |node_ptr, len| { - unsafe { - log(debug, fmt!("slice len %?", len)); - let handle = create_uv_getaddrinfo_t(); - let handle_ptr = ptr::addr_of(&handle); - let handle_data = GetAddrData { - output_ch: output_ch - }; - let handle_data_ptr = ptr::addr_of(&handle_data); - do interact(iotask) |loop_ptr| { - unsafe { - let result = uv_getaddrinfo( - loop_ptr, - handle_ptr, - get_addr_cb, - node_ptr, - ptr::null(), - ptr::null()); - match result { - 0i32 => { + -> result::Result<~[IpAddr], IpGetAddrErr> { + let (output_po, output_ch) = stream(); + let output_ch = SharedChan(output_ch); + do str::as_buf(node) |node_ptr, len| { + unsafe { + log(debug, fmt!("slice len %?", len)); + let handle = create_uv_getaddrinfo_t(); + let handle_ptr = ptr::addr_of(&handle); + let handle_data = GetAddrData { + output_ch: output_ch.clone() + }; + let handle_data_ptr = ptr::addr_of(&handle_data); + do interact(iotask) |loop_ptr| { + unsafe { + let result = uv_getaddrinfo( + loop_ptr, + handle_ptr, + get_addr_cb, + node_ptr, + ptr::null(), + ptr::null()); + match result { + 0i32 => { set_data_for_req(handle_ptr, handle_data_ptr); - } - _ => { + } + _ => { output_ch.send(result::Err(GetAddrUnknownError)); - } } } - }; - output_ch.recv() - } + } + }; + output_po.recv() } } } @@ -300,7 +300,7 @@ pub mod v6 { } struct GetAddrData { - output_ch: oldcomm::Chan<result::Result<~[IpAddr],IpGetAddrErr>> + output_ch: SharedChan<result::Result<~[IpAddr],IpGetAddrErr>> } extern fn get_addr_cb(handle: *uv_getaddrinfo_t, status: libc::c_int, @@ -309,6 +309,7 @@ extern fn get_addr_cb(handle: *uv_getaddrinfo_t, status: libc::c_int, log(debug, ~"in get_addr_cb"); let handle_data = get_data_for_req(handle) as *GetAddrData; + let output_ch = (*handle_data).output_ch.clone(); if status == 0i32 { if res != (ptr::null::<addrinfo>()) { let mut out_vec = ~[]; @@ -326,7 +327,7 @@ extern fn get_addr_cb(handle: *uv_getaddrinfo_t, status: libc::c_int, else { log(debug, ~"curr_addr is not of family AF_INET or "+ ~"AF_INET6. Error."); - (*handle_data).output_ch.send( + output_ch.send( result::Err(GetAddrUnknownError)); break; }; @@ -344,17 +345,17 @@ extern fn get_addr_cb(handle: *uv_getaddrinfo_t, status: libc::c_int, } log(debug, fmt!("successful process addrinfo result, len: %?", vec::len(out_vec))); - (*handle_data).output_ch.send(result::Ok(move out_vec)); + output_ch.send(result::Ok(move out_vec)); } else { log(debug, ~"addrinfo pointer is NULL"); - (*handle_data).output_ch.send( + output_ch.send( result::Err(GetAddrUnknownError)); } } else { log(debug, ~"status != 0 error in get_addr_cb"); - (*handle_data).output_ch.send( + output_ch.send( result::Err(GetAddrUnknownError)); } if res != (ptr::null::<addrinfo>()) { |
