Skip to content

Commit adcdb86

Browse files
committed
---
yaml --- r: 143284 b: refs/heads/try2 c: d6e1a6b h: refs/heads/master v: v3
1 parent 3b25536 commit adcdb86

File tree

3 files changed

+50
-104
lines changed

3 files changed

+50
-104
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: e2bb32bea19f8bfd2165361b5ad2d025c2ffeba0
8+
refs/heads/try2: d6e1a6b237d4c3b04a7dff6609c3427eb99bbc60
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/libstd/rt/io/net/tcp.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ impl TcpStream {
4545
}
4646

4747
pub fn peer_name(&mut self) -> Option<IpAddr> {
48-
match (***self).peer_name() {
48+
match (**self).peer_name() {
4949
Ok(pn) => Some(pn),
5050
Err(ioerr) => {
5151
rtdebug!("failed to get peer name: %?", ioerr);
@@ -56,7 +56,7 @@ impl TcpStream {
5656
}
5757

5858
pub fn socket_name(&mut self) -> Option<IpAddr> {
59-
match (***self).socket_name() {
59+
match (**self).socket_name() {
6060
Ok(sn) => Some(sn),
6161
Err(ioerr) => {
6262
rtdebug!("failed to get socket name: %?", ioerr);
@@ -115,7 +115,7 @@ impl TcpListener {
115115
}
116116

117117
pub fn socket_name(&mut self) -> Option<IpAddr> {
118-
match (***self).socket_name() {
118+
match (**self).socket_name() {
119119
Ok(sn) => Some(sn),
120120
Err(ioerr) => {
121121
rtdebug!("failed to get socket name: %?", ioerr);

branches/try2/src/libstd/rt/uv/uvio.rs

Lines changed: 46 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use cell::Cell;
1515
use cast;
1616
use cast::transmute;
1717
use clone::Clone;
18+
use libc::c_void;
1819
use rt::io::IoError;
1920
use rt::io::net::ip::IpAddr;
2021
use rt::uv::*;
@@ -34,6 +35,47 @@ use unstable::sync::{Exclusive, exclusive};
3435
next_test_ip4,
3536
run_in_newsched_task};
3637

38+
enum SocketNameKind {
39+
TcpPeer,
40+
Tcp,
41+
Udp
42+
}
43+
44+
fn socket_name<T, U: Watcher + NativeHandle<*T>>(sk: SocketNameKind,
45+
handle: U) -> Result<IpAddr, IoError> {
46+
47+
let getsockname = match sk {
48+
TcpPeer => uvll::rust_uv_tcp_getpeername,
49+
Tcp => uvll::rust_uv_tcp_getsockname,
50+
Udp => uvll::rust_uv_udp_getsockname
51+
};
52+
53+
// Allocate a sockaddr_storage
54+
// since we don't know if it's ipv4 or ipv6
55+
let r_addr = unsafe { uvll::malloc_sockaddr_storage() };
56+
57+
let r = unsafe {
58+
getsockname(handle.native_handle() as *c_void, r_addr as *uvll::sockaddr_storage)
59+
};
60+
61+
if r != 0 {
62+
let status = status_to_maybe_uv_error(handle, r);
63+
return Err(uv_error_to_io_error(status.unwrap()));
64+
}
65+
66+
let addr = unsafe {
67+
if uvll::is_ip6_addr(r_addr as *uvll::sockaddr) {
68+
net::uv_ip_to_ip(UvIpv6(r_addr as *uvll::sockaddr_in6))
69+
} else {
70+
net::uv_ip_to_ip(UvIpv4(r_addr as *uvll::sockaddr_in))
71+
}
72+
};
73+
74+
unsafe { uvll::free_sockaddr_storage(r_addr); }
75+
76+
Ok(addr)
77+
78+
}
3779

3880
pub struct UvEventLoop {
3981
uvio: UvIoFactory
@@ -323,31 +365,7 @@ impl Drop for UvTcpListener {
323365

324366
impl RtioSocket for UvTcpListener {
325367
fn socket_name(&mut self) -> Result<IpAddr, IoError> {
326-
// Allocate a sockaddr_storage
327-
// since we don't know if it's ipv4 or ipv6
328-
let r_addr = unsafe { uvll::malloc_sockaddr_storage() };
329-
330-
let r = unsafe {
331-
uvll::rust_uv_tcp_getsockname(self.watcher.native_handle(),
332-
r_addr as *uvll::sockaddr_storage)
333-
};
334-
335-
if r != 0 {
336-
let status = status_to_maybe_uv_error(self.watcher, r);
337-
return Err(uv_error_to_io_error(status.unwrap()));
338-
}
339-
340-
let addr = unsafe {
341-
if uvll::is_ip6_addr(r_addr as *uvll::sockaddr) {
342-
net::uv_ip_to_ip(UvIpv6(r_addr as *uvll::sockaddr_in6))
343-
} else {
344-
net::uv_ip_to_ip(UvIpv4(r_addr as *uvll::sockaddr_in))
345-
}
346-
};
347-
348-
unsafe { uvll::free_sockaddr_storage(r_addr); }
349-
350-
Ok(addr)
368+
socket_name(Tcp, self.watcher)
351369
}
352370
}
353371

@@ -409,31 +427,7 @@ impl Drop for UvTcpStream {
409427

410428
impl RtioSocket for UvTcpStream {
411429
fn socket_name(&mut self) -> Result<IpAddr, IoError> {
412-
// Allocate a sockaddr_storage
413-
// since we don't know if it's ipv4 or ipv6
414-
let r_addr = unsafe { uvll::malloc_sockaddr_storage() };
415-
416-
let r = unsafe {
417-
uvll::rust_uv_tcp_getsockname(self.native_handle(),
418-
r_addr as *uvll::sockaddr_storage)
419-
};
420-
421-
if r != 0 {
422-
let status = status_to_maybe_uv_error(**self, r);
423-
return Err(uv_error_to_io_error(status.unwrap()));
424-
}
425-
426-
let addr = unsafe {
427-
if uvll::is_ip6_addr(r_addr as *uvll::sockaddr) {
428-
net::uv_ip_to_ip(UvIpv6(r_addr as *uvll::sockaddr_in6))
429-
} else {
430-
net::uv_ip_to_ip(UvIpv4(r_addr as *uvll::sockaddr_in))
431-
}
432-
};
433-
434-
unsafe { uvll::free_sockaddr_storage(r_addr); }
435-
436-
Ok(addr)
430+
socket_name(Tcp, **self)
437431
}
438432
}
439433

@@ -510,31 +504,7 @@ impl RtioTcpStream for UvTcpStream {
510504
}
511505

512506
fn peer_name(&mut self) -> Result<IpAddr, IoError> {
513-
// Allocate a sockaddr_storage
514-
// since we don't know if it's ipv4 or ipv6
515-
let r_addr = unsafe { uvll::malloc_sockaddr_storage() };
516-
517-
let r = unsafe {
518-
uvll::rust_uv_tcp_getpeername(self.native_handle(),
519-
r_addr as *uvll::sockaddr_storage)
520-
};
521-
522-
if r != 0 {
523-
let status = status_to_maybe_uv_error(**self, r);
524-
return Err(uv_error_to_io_error(status.unwrap()));
525-
}
526-
527-
let addr = unsafe {
528-
if uvll::is_ip6_addr(r_addr as *uvll::sockaddr) {
529-
net::uv_ip_to_ip(UvIpv6(r_addr as *uvll::sockaddr_in6))
530-
} else {
531-
net::uv_ip_to_ip(UvIpv4(r_addr as *uvll::sockaddr_in))
532-
}
533-
};
534-
535-
unsafe { uvll::free_sockaddr_storage(r_addr); }
536-
537-
Ok(addr)
507+
socket_name(TcpPeer, **self)
538508
}
539509

540510
// XXX implement
@@ -562,31 +532,7 @@ impl Drop for UvUdpSocket {
562532

563533
impl RtioSocket for UvUdpSocket {
564534
fn socket_name(&mut self) -> Result<IpAddr, IoError> {
565-
// Allocate a sockaddr_storage
566-
// since we don't know if it's ipv4 or ipv6
567-
let r_addr = unsafe { uvll::malloc_sockaddr_storage() };
568-
569-
let r = unsafe {
570-
uvll::rust_uv_udp_getsockname(self.native_handle(),
571-
r_addr as *uvll::sockaddr_storage)
572-
};
573-
574-
if r != 0 {
575-
let status = status_to_maybe_uv_error(**self, r);
576-
return Err(uv_error_to_io_error(status.unwrap()));
577-
}
578-
579-
let addr = unsafe {
580-
if uvll::is_ip6_addr(r_addr as *uvll::sockaddr) {
581-
net::uv_ip_to_ip(UvIpv6(r_addr as *uvll::sockaddr_in6))
582-
} else {
583-
net::uv_ip_to_ip(UvIpv4(r_addr as *uvll::sockaddr_in))
584-
}
585-
};
586-
587-
unsafe { uvll::free_sockaddr_storage(r_addr); }
588-
589-
Ok(addr)
535+
socket_name(Udp, **self)
590536
}
591537
}
592538

0 commit comments

Comments
 (0)