about summary refs log tree commit diff
path: root/src/libstd/net_ip.rs
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-01-25 00:52:50 -0800
committerBrian Anderson <banderson@mozilla.com>2013-01-29 19:54:55 -0800
commitda4b3768971c7c025ba8a85ebf59572fd752dfb6 (patch)
treee47abf6553bffeaaa35d682f74f0cc42df5e913e /src/libstd/net_ip.rs
parent87acde8826af4dfd8391cbccc48526381796dab3 (diff)
downloadrust-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.rs71
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>()) {