summary refs log tree commit diff
path: root/src/libstd/rt/io
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-09-06 02:31:02 -0700
committerbors <bors@rust-lang.org>2013-09-06 02:31:02 -0700
commit25ed29a0edb3d48fef843a0b818ee68faf2252da (patch)
treecb046f4d81aed8b3f3677aa29e34a78b6a001baf /src/libstd/rt/io
parentb650da1673370b58d648fb99708e9dfcbbf79689 (diff)
parent807408b708a11c9a96b2dc4fedd611276273574f (diff)
downloadrust-25ed29a0edb3d48fef843a0b818ee68faf2252da.tar.gz
rust-25ed29a0edb3d48fef843a0b818ee68faf2252da.zip
auto merge of #9000 : brson/rust/dns, r=anasazi
This exposes a very simple function for resolving host names. There's a lot more that needs to be done, but this is probably enough for servo to get started connecting to real websites again.
Diffstat (limited to 'src/libstd/rt/io')
-rw-r--r--src/libstd/rt/io/mod.rs8
-rw-r--r--src/libstd/rt/io/net/mod.rs62
2 files changed, 63 insertions, 7 deletions
diff --git a/src/libstd/rt/io/mod.rs b/src/libstd/rt/io/mod.rs
index d1919905236..5ceea877453 100644
--- a/src/libstd/rt/io/mod.rs
+++ b/src/libstd/rt/io/mod.rs
@@ -269,13 +269,7 @@ pub use self::extensions::WriterByteConversions;
 pub mod file;
 
 /// Synchronous, non-blocking network I/O.
-pub mod net {
-    pub mod tcp;
-    pub mod udp;
-    pub mod ip;
-    #[cfg(unix)]
-    pub mod unix;
-}
+pub mod net;
 
 /// Readers and Writers for memory buffers and strings.
 pub mod mem;
diff --git a/src/libstd/rt/io/net/mod.rs b/src/libstd/rt/io/net/mod.rs
new file mode 100644
index 00000000000..f44e879a63a
--- /dev/null
+++ b/src/libstd/rt/io/net/mod.rs
@@ -0,0 +1,62 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use option::{Option, Some, None};
+use result::{Ok, Err};
+use rt::io::io_error;
+use rt::io::net::ip::IpAddr;
+use rt::rtio::{IoFactory, IoFactoryObject};
+use rt::local::Local;
+
+pub mod tcp;
+pub mod udp;
+pub mod ip;
+#[cfg(unix)]
+pub mod unix;
+
+/// Simplistic name resolution
+pub fn get_host_addresses(host: &str) -> Option<~[IpAddr]> {
+    /*!
+     * Get the IP addresses for a given host name.
+     *
+     * Raises io_error on failure.
+     */
+
+    let ipaddrs = unsafe {
+        let io: *mut IoFactoryObject = Local::unsafe_borrow();
+        (*io).get_host_addresses(host)
+    };
+
+    match ipaddrs {
+        Ok(i) => Some(i),
+        Err(ioerr) => {
+            io_error::cond.raise(ioerr);
+            None
+        }
+    }
+}
+
+#[cfg(test)]
+mod test {
+    use option::Some;
+    use rt::io::net::ip::Ipv4Addr;
+    use super::*;
+
+    #[test]
+    fn dns_smoke_test() {
+        let ipaddrs = get_host_addresses("localhost").unwrap();
+        let mut found_local = false;
+        let local_addr = &Ipv4Addr(127, 0, 0, 1);
+        for addr in ipaddrs.iter() {
+            found_local = found_local || addr == local_addr;
+        }
+        assert!(found_local);
+    }
+}