File tree Expand file tree Collapse file tree 3 files changed +131
-228
lines changed
branches/snap-stage3/src/libstd/io/net Expand file tree Collapse file tree 3 files changed +131
-228
lines changed Original file line number Diff line number Diff line change 1
1
---
2
2
refs/heads/master: 0b48001c28329392b26961eaf1c3ed293a352d6f
3
3
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4
- refs/heads/snap-stage3: d97bfb22f8c4958909c5669c256c50f124c17d58
4
+ refs/heads/snap-stage3: ac846749f0abbd0b6107406ba2f97886605e1ad4
5
5
refs/heads/try: f58aad6dce273570fb130b4df008ef9acd5a5be2
6
6
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
7
7
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
Original file line number Diff line number Diff line change 10
10
11
11
//! Networking I/O
12
12
13
+ use io:: { IoError , InvalidInput } ;
14
+ use option:: None ;
15
+ use result:: { Result , Ok , Err } ;
13
16
use rt:: rtio;
14
- use self :: ip:: { Ipv4Addr , Ipv6Addr , IpAddr } ;
17
+ use self :: ip:: { Ipv4Addr , Ipv6Addr , IpAddr , ToSocketAddr } ;
15
18
16
19
pub use self :: addrinfo:: get_host_addresses;
17
20
@@ -38,3 +41,25 @@ fn from_rtio(ip: rtio::IpAddr) -> IpAddr {
38
41
}
39
42
}
40
43
}
44
+
45
+ fn with_addresses < A : ToSocketAddr , T > (
46
+ addr : A ,
47
+ action : |& mut rtio:: IoFactory , rtio:: SocketAddr | -> Result < T , rtio:: IoError >
48
+ ) -> Result < T , IoError > {
49
+ const DEFAULT_ERROR : IoError = IoError {
50
+ kind : InvalidInput ,
51
+ desc: "no addresses found for hostname" ,
52
+ detail : None
53
+ } ;
54
+
55
+ let addresses = try!( addr. to_socket_addr_all ( ) ) ;
56
+ let mut err = DEFAULT_ERROR ;
57
+ for addr in addresses. into_iter ( ) {
58
+ let addr = rtio:: SocketAddr { ip : to_rtio ( addr. ip ) , port : addr. port } ;
59
+ match rtio:: LocalIo :: maybe_raise ( |io| action ( io, addr) ) {
60
+ Ok ( r) => return Ok ( r) ,
61
+ Err ( e) => err = IoError :: from_rtio_error ( e)
62
+ }
63
+ }
64
+ Err ( err)
65
+ }
You can’t perform that action at this time.
0 commit comments