diff options
| author | bors <bors@rust-lang.org> | 2013-09-06 02:31:02 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-09-06 02:31:02 -0700 |
| commit | 25ed29a0edb3d48fef843a0b818ee68faf2252da (patch) | |
| tree | cb046f4d81aed8b3f3677aa29e34a78b6a001baf /src/libstd/rt/io | |
| parent | b650da1673370b58d648fb99708e9dfcbbf79689 (diff) | |
| parent | 807408b708a11c9a96b2dc4fedd611276273574f (diff) | |
| download | rust-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.rs | 8 | ||||
| -rw-r--r-- | src/libstd/rt/io/net/mod.rs | 62 |
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); + } +} |
