about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorLuqman Aden <laden@csclub.uwaterloo.ca>2012-10-19 22:51:33 -0400
committerBrian Anderson <banderson@mozilla.com>2012-10-20 17:17:10 -0700
commit79e538d32ab33604a8288e7b76c875ff075743d2 (patch)
treee20890198e545d0f0e313332c71142cb88439aaf /src
parent0e2437bf5d4a1f863888d4b0b5995a695f966e73 (diff)
downloadrust-79e538d32ab33604a8288e7b76c875ff075743d2.tar.gz
rust-79e538d32ab33604a8288e7b76c875ff075743d2.zip
uv: use just getpeername for both ipv4 and ipv6.
Diffstat (limited to 'src')
-rw-r--r--src/libstd/net_tcp.rs34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs
index 94293c3aa41..86b3d6ba08f 100644
--- a/src/libstd/net_tcp.rs
+++ b/src/libstd/net_tcp.rs
@@ -134,6 +134,10 @@ pub fn connect(input_ip: ip::IpAddr, port: uint,
         stream_handle_ptr: stream_handle_ptr,
         connect_req: uv::ll::connect_t(),
         write_req: uv::ll::write_t(),
+        ipv6: match input_ip {
+            ip::Ipv4(_) => { false }
+            ip::Ipv6(_) => { true }
+        },
         iotask: iotask
     };
     let socket_data_ptr = ptr::addr_of(&(*socket_data));
@@ -475,6 +479,7 @@ pub fn accept(new_conn: TcpNewConnection)
             stream_handle_ptr : stream_handle_ptr,
             connect_req : uv::ll::connect_t(),
             write_req : uv::ll::write_t(),
+            ipv6: (*server_data_ptr).ipv6,
             iotask : iotask
         };
         let client_socket_data_ptr = ptr::addr_of(&(*client_socket_data));
@@ -590,6 +595,10 @@ fn listen_common(host_ip: ip::IpAddr, port: uint, backlog: uint,
         kill_ch: kill_ch,
         on_connect_cb: move on_connect_cb,
         iotask: iotask,
+        ipv6: match host_ip {
+            ip::Ipv4(_) => { false }
+            ip::Ipv6(_) => { true }
+        },
         mut active: true
     };
     let server_data_ptr = ptr::addr_of(&server_data);
@@ -748,18 +757,17 @@ impl TcpSocket {
     }
     pub fn getpeername() -> ip::IpAddr {
         unsafe {
-            let addr = uv::ll::ip4_addr("", 0);
-            uv::ll::tcp_getpeername(self.socket_data.stream_handle_ptr,
-                                    ptr::addr_of(&addr));
-            ip::Ipv4(move addr)
-        }
-    }
-    pub fn getpeername6() -> ip::IpAddr {
-        unsafe {
-            let addr = uv::ll::ip6_addr("", 0);
-            uv::ll::tcp_getpeername6(self.socket_data.stream_handle_ptr,
-                                     ptr::addr_of(&addr));
-            ip::Ipv6(move addr)
+            if self.socket_data.ipv6 {
+                let addr = uv::ll::ip6_addr("", 0);
+                uv::ll::tcp_getpeername6(self.socket_data.stream_handle_ptr,
+                                         ptr::addr_of(&addr));
+                ip::Ipv6(move addr)
+            } else {
+                let addr = uv::ll::ip4_addr("", 0);
+                uv::ll::tcp_getpeername(self.socket_data.stream_handle_ptr,
+                                        ptr::addr_of(&addr));
+                ip::Ipv4(move addr)
+            }
         }
     }
 }
@@ -1019,6 +1027,7 @@ type TcpListenFcData = {
     kill_ch: comm::Chan<Option<TcpErrData>>,
     on_connect_cb: fn~(*uv::ll::uv_tcp_t),
     iotask: IoTask,
+    ipv6: bool,
     mut active: bool
 };
 
@@ -1217,6 +1226,7 @@ type TcpSocketData = {
     stream_handle_ptr: *uv::ll::uv_tcp_t,
     connect_req: uv::ll::uv_connect_t,
     write_req: uv::ll::uv_write_t,
+    ipv6: bool,
     iotask: IoTask
 };