@@ -134,6 +134,10 @@ pub fn connect(input_ip: ip::IpAddr, port: uint,
134
134
stream_handle_ptr: stream_handle_ptr,
135
135
connect_req: uv:: ll:: connect_t ( ) ,
136
136
write_req: uv:: ll:: write_t ( ) ,
137
+ ipv6: match input_ip {
138
+ ip:: Ipv4 ( _) => { false }
139
+ ip:: Ipv6 ( _) => { true }
140
+ } ,
137
141
iotask: iotask
138
142
} ;
139
143
let socket_data_ptr = ptr:: addr_of ( & ( * socket_data) ) ;
@@ -475,6 +479,7 @@ pub fn accept(new_conn: TcpNewConnection)
475
479
stream_handle_ptr : stream_handle_ptr,
476
480
connect_req : uv:: ll:: connect_t ( ) ,
477
481
write_req : uv:: ll:: write_t ( ) ,
482
+ ipv6 : ( * server_data_ptr) . ipv6 ,
478
483
iotask : iotask
479
484
} ;
480
485
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,
590
595
kill_ch: kill_ch,
591
596
on_connect_cb: move on_connect_cb,
592
597
iotask: iotask,
598
+ ipv6: match host_ip {
599
+ ip:: Ipv4 ( _) => { false }
600
+ ip:: Ipv6 ( _) => { true }
601
+ } ,
593
602
mut active: true
594
603
} ;
595
604
let server_data_ptr = ptr:: addr_of ( & server_data) ;
@@ -748,18 +757,17 @@ impl TcpSocket {
748
757
}
749
758
pub fn getpeername ( ) -> ip:: IpAddr {
750
759
unsafe {
751
- let addr = uv:: ll:: ip4_addr ( "" , 0 ) ;
752
- uv:: ll:: tcp_getpeername ( self . socket_data . stream_handle_ptr ,
753
- ptr:: addr_of ( & addr) ) ;
754
- ip:: Ipv4 ( move addr)
755
- }
756
- }
757
- pub fn getpeername6 ( ) -> ip:: IpAddr {
758
- unsafe {
759
- let addr = uv:: ll:: ip6_addr ( "" , 0 ) ;
760
- uv:: ll:: tcp_getpeername6 ( self . socket_data . stream_handle_ptr ,
761
- ptr:: addr_of ( & addr) ) ;
762
- ip:: Ipv6 ( move addr)
760
+ if self . socket_data . ipv6 {
761
+ let addr = uv:: ll:: ip6_addr ( "" , 0 ) ;
762
+ uv:: ll:: tcp_getpeername6 ( self . socket_data . stream_handle_ptr ,
763
+ ptr:: addr_of ( & addr) ) ;
764
+ ip:: Ipv6 ( move addr)
765
+ } else {
766
+ let addr = uv:: ll:: ip4_addr ( "" , 0 ) ;
767
+ uv:: ll:: tcp_getpeername ( self . socket_data . stream_handle_ptr ,
768
+ ptr:: addr_of ( & addr) ) ;
769
+ ip:: Ipv4 ( move addr)
770
+ }
763
771
}
764
772
}
765
773
}
@@ -1019,6 +1027,7 @@ type TcpListenFcData = {
1019
1027
kill_ch : comm:: Chan < Option < TcpErrData > > ,
1020
1028
on_connect_cb : fn ~( * uv:: ll:: uv_tcp_t ) ,
1021
1029
iotask : IoTask ,
1030
+ ipv6 : bool ,
1022
1031
mut active : bool
1023
1032
} ;
1024
1033
@@ -1217,6 +1226,7 @@ type TcpSocketData = {
1217
1226
stream_handle_ptr : * uv:: ll:: uv_tcp_t ,
1218
1227
connect_req : uv:: ll:: uv_connect_t ,
1219
1228
write_req : uv:: ll:: uv_write_t ,
1229
+ ipv6 : bool ,
1220
1230
iotask : IoTask
1221
1231
} ;
1222
1232
0 commit comments