about summary refs log tree commit diff
path: root/src/libstd/net_ip.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/net_ip.rs')
-rw-r--r--src/libstd/net_ip.rs152
1 files changed, 79 insertions, 73 deletions
diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs
index fad583a668b..d273138ed3d 100644
--- a/src/libstd/net_ip.rs
+++ b/src/libstd/net_ip.rs
@@ -117,32 +117,36 @@ enum IpGetAddrErr {
 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 => {
-                    set_data_for_req(handle_ptr, handle_data_ptr);
-                  }
-                  _ => {
-                    output_ch.send(result::Err(GetAddrUnknownError));
-                  }
-                }
-            };
-            output_ch.recv()
+        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 => {
+                            set_data_for_req(handle_ptr, handle_data_ptr);
+                          }
+                          _ => {
+                            output_ch.send(result::Err(GetAddrUnknownError));
+                          }
+                        }
+                    }
+                };
+                output_ch.recv()
+            }
         }
     }
 }
@@ -300,62 +304,64 @@ type GetAddrData = {
 };
 
 extern fn get_addr_cb(handle: *uv_getaddrinfo_t, status: libc::c_int,
-                      res: *addrinfo) unsafe {
-    log(debug, ~"in get_addr_cb");
-    let handle_data = get_data_for_req(handle) as
-        *GetAddrData;
-    if status == 0i32 {
-        if res != (ptr::null::<addrinfo>()) {
-            let mut out_vec = ~[];
-            log(debug, fmt!("initial addrinfo: %?", res));
-            let mut curr_addr = res;
-            loop {
-                let new_ip_addr = if ll::is_ipv4_addrinfo(curr_addr) {
-                    Ipv4(copy((
-                        *ll::addrinfo_as_sockaddr_in(curr_addr))))
-                }
-                else if ll::is_ipv6_addrinfo(curr_addr) {
-                    Ipv6(copy((
-                        *ll::addrinfo_as_sockaddr_in6(curr_addr))))
-                }
-                else {
-                    log(debug, ~"curr_addr is not of family AF_INET or "+
-                        ~"AF_INET6. Error.");
-                    (*handle_data).output_ch.send(
-                        result::Err(GetAddrUnknownError));
-                    break;
-                };
-                out_vec.push(move new_ip_addr);
+                      res: *addrinfo) {
+    unsafe {
+        log(debug, ~"in get_addr_cb");
+        let handle_data = get_data_for_req(handle) as
+            *GetAddrData;
+        if status == 0i32 {
+            if res != (ptr::null::<addrinfo>()) {
+                let mut out_vec = ~[];
+                log(debug, fmt!("initial addrinfo: %?", res));
+                let mut curr_addr = res;
+                loop {
+                    let new_ip_addr = if ll::is_ipv4_addrinfo(curr_addr) {
+                        Ipv4(copy((
+                            *ll::addrinfo_as_sockaddr_in(curr_addr))))
+                    }
+                    else if ll::is_ipv6_addrinfo(curr_addr) {
+                        Ipv6(copy((
+                            *ll::addrinfo_as_sockaddr_in6(curr_addr))))
+                    }
+                    else {
+                        log(debug, ~"curr_addr is not of family AF_INET or "+
+                            ~"AF_INET6. Error.");
+                        (*handle_data).output_ch.send(
+                            result::Err(GetAddrUnknownError));
+                        break;
+                    };
+                    out_vec.push(move new_ip_addr);
 
-                let next_addr = ll::get_next_addrinfo(curr_addr);
-                if next_addr == ptr::null::<addrinfo>() as *addrinfo {
-                    log(debug, ~"null next_addr encountered. no mas");
-                    break;
-                }
-                else {
-                    curr_addr = next_addr;
-                    log(debug, fmt!("next_addr addrinfo: %?", curr_addr));
+                    let next_addr = ll::get_next_addrinfo(curr_addr);
+                    if next_addr == ptr::null::<addrinfo>() as *addrinfo {
+                        log(debug, ~"null next_addr encountered. no mas");
+                        break;
+                    }
+                    else {
+                        curr_addr = next_addr;
+                        log(debug, fmt!("next_addr addrinfo: %?", curr_addr));
+                    }
                 }
+                log(debug, fmt!("successful process addrinfo result, len: %?",
+                                vec::len(out_vec)));
+                (*handle_data).output_ch.send(result::Ok(move out_vec));
+            }
+            else {
+                log(debug, ~"addrinfo pointer is NULL");
+                (*handle_data).output_ch.send(
+                    result::Err(GetAddrUnknownError));
             }
-            log(debug, fmt!("successful process addrinfo result, len: %?",
-                            vec::len(out_vec)));
-            (*handle_data).output_ch.send(result::Ok(move out_vec));
         }
         else {
-            log(debug, ~"addrinfo pointer is NULL");
+            log(debug, ~"status != 0 error in get_addr_cb");
             (*handle_data).output_ch.send(
                 result::Err(GetAddrUnknownError));
         }
+        if res != (ptr::null::<addrinfo>()) {
+            uv_freeaddrinfo(res);
+        }
+        log(debug, ~"leaving get_addr_cb");
     }
-    else {
-        log(debug, ~"status != 0 error in get_addr_cb");
-        (*handle_data).output_ch.send(
-            result::Err(GetAddrUnknownError));
-    }
-    if res != (ptr::null::<addrinfo>()) {
-        uv_freeaddrinfo(res);
-    }
-    log(debug, ~"leaving get_addr_cb");
 }
 
 #[cfg(test)]