@@ -54,10 +54,10 @@ use {
54
54
solana_ledger:: shred:: Shred ,
55
55
solana_measure:: measure:: Measure ,
56
56
solana_net_utils:: {
57
- bind_common , bind_common_in_range , bind_in_range, bind_in_range_with_config ,
58
- bind_more_with_config, bind_to_localhost, bind_to_unspecified,
57
+ bind_common_in_range_with_config , bind_common_with_config , bind_in_range,
58
+ bind_in_range_with_config , bind_more_with_config, bind_to_localhost, bind_to_unspecified,
59
59
bind_two_in_range_with_offset_and_config, find_available_port_in_range,
60
- multi_bind_in_range , PortRange , SocketConfig , VALIDATOR_PORT_RANGE ,
60
+ multi_bind_in_range_with_config , PortRange , SocketConfig , VALIDATOR_PORT_RANGE ,
61
61
} ,
62
62
solana_perf:: {
63
63
data_budget:: DataBudget ,
@@ -2614,21 +2614,20 @@ impl Node {
2614
2614
let localhost_ip_addr = IpAddr :: V4 ( Ipv4Addr :: LOCALHOST ) ;
2615
2615
let port_range = ( 1024 , 65535 ) ;
2616
2616
2617
- let udp_config = SocketConfig { reuseport : false } ;
2618
- let quic_config = SocketConfig { reuseport : true } ;
2617
+ let udp_config = SocketConfig :: default ( ) ;
2618
+ let quic_config = SocketConfig :: default ( ) . reuseport ( true ) ;
2619
2619
let ( ( _tpu_port, tpu) , ( _tpu_quic_port, tpu_quic) ) =
2620
2620
bind_two_in_range_with_offset_and_config (
2621
2621
localhost_ip_addr,
2622
2622
port_range,
2623
2623
QUIC_PORT_OFFSET ,
2624
- udp_config. clone ( ) ,
2625
- quic_config. clone ( ) ,
2624
+ udp_config,
2625
+ quic_config,
2626
2626
)
2627
2627
. unwrap ( ) ;
2628
- let tpu_quic =
2629
- bind_more_with_config ( tpu_quic, num_quic_endpoints, quic_config. clone ( ) ) . unwrap ( ) ;
2628
+ let tpu_quic = bind_more_with_config ( tpu_quic, num_quic_endpoints, quic_config) . unwrap ( ) ;
2630
2629
let ( gossip_port, ( gossip, ip_echo) ) =
2631
- bind_common_in_range ( localhost_ip_addr, port_range) . unwrap ( ) ;
2630
+ bind_common_in_range_with_config ( localhost_ip_addr, port_range, udp_config ) . unwrap ( ) ;
2632
2631
let gossip_addr = SocketAddr :: new ( localhost_ip_addr, gossip_port) ;
2633
2632
let tvu = bind_to_localhost ( ) . unwrap ( ) ;
2634
2633
let tvu_quic = bind_to_localhost ( ) . unwrap ( ) ;
@@ -2637,13 +2636,12 @@ impl Node {
2637
2636
localhost_ip_addr,
2638
2637
port_range,
2639
2638
QUIC_PORT_OFFSET ,
2640
- udp_config. clone ( ) ,
2641
- quic_config. clone ( ) ,
2639
+ udp_config,
2640
+ quic_config,
2642
2641
)
2643
2642
. unwrap ( ) ;
2644
2643
let tpu_forwards_quic =
2645
- bind_more_with_config ( tpu_forwards_quic, num_quic_endpoints, quic_config. clone ( ) )
2646
- . unwrap ( ) ;
2644
+ bind_more_with_config ( tpu_forwards_quic, num_quic_endpoints, quic_config) . unwrap ( ) ;
2647
2645
let tpu_vote = bind_to_localhost ( ) . unwrap ( ) ;
2648
2646
let tpu_vote_quic = bind_to_localhost ( ) . unwrap ( ) ;
2649
2647
let tpu_vote_quic =
@@ -2732,21 +2730,19 @@ impl Node {
2732
2730
port_range : PortRange ,
2733
2731
bind_ip_addr : IpAddr ,
2734
2732
) -> ( u16 , ( UdpSocket , TcpListener ) ) {
2733
+ let config = SocketConfig :: default ( ) ;
2735
2734
if gossip_addr. port ( ) != 0 {
2736
2735
(
2737
2736
gossip_addr. port ( ) ,
2738
- bind_common ( bind_ip_addr, gossip_addr. port ( ) ) . unwrap_or_else ( |e| {
2739
- panic ! ( "gossip_addr bind_to port {}: {}" , gossip_addr. port( ) , e)
2740
- } ) ,
2737
+ bind_common_with_config ( bind_ip_addr, gossip_addr. port ( ) , config ) . unwrap_or_else (
2738
+ |e| panic ! ( "gossip_addr bind_to port {}: {}" , gossip_addr. port( ) , e) ,
2739
+ ) ,
2741
2740
)
2742
2741
} else {
2743
- bind_common_in_range ( bind_ip_addr, port_range) . expect ( "Failed to bind" )
2742
+ bind_common_in_range_with_config ( bind_ip_addr, port_range, config)
2743
+ . expect ( "Failed to bind" )
2744
2744
}
2745
2745
}
2746
- fn bind ( bind_ip_addr : IpAddr , port_range : PortRange ) -> ( u16 , UdpSocket ) {
2747
- let config = SocketConfig { reuseport : false } ;
2748
- Self :: bind_with_config ( bind_ip_addr, port_range, config)
2749
- }
2750
2746
2751
2747
fn bind_with_config (
2752
2748
bind_ip_addr : IpAddr ,
@@ -2764,49 +2760,65 @@ impl Node {
2764
2760
) -> Self {
2765
2761
let ( gossip_port, ( gossip, ip_echo) ) =
2766
2762
Self :: get_gossip_port ( gossip_addr, port_range, bind_ip_addr) ;
2767
- let ( tvu_port, tvu) = Self :: bind ( bind_ip_addr, port_range) ;
2768
- let ( tvu_quic_port, tvu_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2769
- let udp_config = SocketConfig { reuseport : false } ;
2770
- let quic_config = SocketConfig { reuseport : true } ;
2763
+
2764
+ let socket_config = SocketConfig :: default ( ) ;
2765
+ let socket_config_reuseport = SocketConfig :: default ( ) . reuseport ( true ) ;
2766
+ let ( tvu_port, tvu) = Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2767
+ let ( tvu_quic_port, tvu_quic) =
2768
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2771
2769
let ( ( tpu_port, tpu) , ( _tpu_quic_port, tpu_quic) ) =
2772
2770
bind_two_in_range_with_offset_and_config (
2773
2771
bind_ip_addr,
2774
2772
port_range,
2775
2773
QUIC_PORT_OFFSET ,
2776
- udp_config . clone ( ) ,
2777
- quic_config . clone ( ) ,
2774
+ socket_config ,
2775
+ socket_config_reuseport ,
2778
2776
)
2779
2777
. unwrap ( ) ;
2780
2778
let tpu_quic: Vec < UdpSocket > =
2781
- bind_more_with_config ( tpu_quic, DEFAULT_QUIC_ENDPOINTS , quic_config. clone ( ) ) . unwrap ( ) ;
2779
+ bind_more_with_config ( tpu_quic, DEFAULT_QUIC_ENDPOINTS , socket_config_reuseport)
2780
+ . unwrap ( ) ;
2781
+
2782
2782
let ( ( tpu_forwards_port, tpu_forwards) , ( _tpu_forwards_quic_port, tpu_forwards_quic) ) =
2783
2783
bind_two_in_range_with_offset_and_config (
2784
2784
bind_ip_addr,
2785
2785
port_range,
2786
2786
QUIC_PORT_OFFSET ,
2787
- udp_config ,
2788
- quic_config . clone ( ) ,
2787
+ socket_config ,
2788
+ socket_config_reuseport ,
2789
2789
)
2790
2790
. unwrap ( ) ;
2791
2791
let tpu_forwards_quic = bind_more_with_config (
2792
2792
tpu_forwards_quic,
2793
2793
DEFAULT_QUIC_ENDPOINTS ,
2794
- quic_config . clone ( ) ,
2794
+ socket_config_reuseport ,
2795
2795
)
2796
2796
. unwrap ( ) ;
2797
- let ( tpu_vote_port, tpu_vote) = Self :: bind ( bind_ip_addr, port_range) ;
2798
- let ( tpu_vote_quic_port, tpu_vote_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2799
- let tpu_vote_quic: Vec < UdpSocket > =
2800
- bind_more_with_config ( tpu_vote_quic, DEFAULT_QUIC_ENDPOINTS , quic_config) . unwrap ( ) ;
2801
-
2802
- let ( _, retransmit_socket) = Self :: bind ( bind_ip_addr, port_range) ;
2803
- let ( _, repair) = Self :: bind ( bind_ip_addr, port_range) ;
2804
- let ( _, repair_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2805
- let ( serve_repair_port, serve_repair) = Self :: bind ( bind_ip_addr, port_range) ;
2806
- let ( serve_repair_quic_port, serve_repair_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2807
- let ( _, broadcast) = Self :: bind ( bind_ip_addr, port_range) ;
2808
- let ( _, ancestor_hashes_requests) = Self :: bind ( bind_ip_addr, port_range) ;
2809
- let ( _, ancestor_hashes_requests_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2797
+
2798
+ let ( tpu_vote_port, tpu_vote) =
2799
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2800
+ let ( tpu_vote_quic_port, tpu_vote_quic) =
2801
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2802
+ let tpu_vote_quic: Vec < UdpSocket > = bind_more_with_config (
2803
+ tpu_vote_quic,
2804
+ DEFAULT_QUIC_ENDPOINTS ,
2805
+ socket_config_reuseport,
2806
+ )
2807
+ . unwrap ( ) ;
2808
+
2809
+ let ( _, retransmit_socket) =
2810
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2811
+ let ( _, repair) = Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2812
+ let ( _, repair_quic) = Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2813
+ let ( serve_repair_port, serve_repair) =
2814
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2815
+ let ( serve_repair_quic_port, serve_repair_quic) =
2816
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2817
+ let ( _, broadcast) = Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2818
+ let ( _, ancestor_hashes_requests) =
2819
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2820
+ let ( _, ancestor_hashes_requests_quic) =
2821
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2810
2822
2811
2823
let rpc_port = find_available_port_in_range ( bind_ip_addr, port_range) . unwrap ( ) ;
2812
2824
let rpc_pubsub_port = find_available_port_in_range ( bind_ip_addr, port_range) . unwrap ( ) ;
@@ -2882,62 +2894,86 @@ impl Node {
2882
2894
let ( gossip_port, ( gossip, ip_echo) ) =
2883
2895
Self :: get_gossip_port ( & gossip_addr, port_range, bind_ip_addr) ;
2884
2896
2885
- let ( tvu_port, tvu_sockets) =
2886
- multi_bind_in_range ( bind_ip_addr, port_range, num_tvu_sockets. get ( ) )
2887
- . expect ( "tvu multi_bind" ) ;
2888
- let ( tvu_quic_port, tvu_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2897
+ let socket_config = SocketConfig :: default ( ) ;
2898
+ let socket_config_reuseport = SocketConfig :: default ( ) . reuseport ( true ) ;
2899
+
2900
+ let ( tvu_port, tvu_sockets) = multi_bind_in_range_with_config (
2901
+ bind_ip_addr,
2902
+ port_range,
2903
+ socket_config_reuseport,
2904
+ num_tvu_sockets. get ( ) ,
2905
+ )
2906
+ . expect ( "tvu multi_bind" ) ;
2907
+
2908
+ let ( tvu_quic_port, tvu_quic) =
2909
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2910
+
2889
2911
let ( tpu_port, tpu_sockets) =
2890
- multi_bind_in_range ( bind_ip_addr, port_range, 32 ) . expect ( "tpu multi_bind" ) ;
2912
+ multi_bind_in_range_with_config ( bind_ip_addr, port_range, socket_config_reuseport, 32 )
2913
+ . expect ( "tpu multi_bind" ) ;
2891
2914
2892
- let quic_config = SocketConfig { reuseport : true } ;
2893
2915
let ( _tpu_port_quic, tpu_quic) = Self :: bind_with_config (
2894
2916
bind_ip_addr,
2895
2917
( tpu_port + QUIC_PORT_OFFSET , tpu_port + QUIC_PORT_OFFSET + 1 ) ,
2896
- quic_config . clone ( ) ,
2918
+ socket_config_reuseport ,
2897
2919
) ;
2898
2920
let tpu_quic =
2899
- bind_more_with_config ( tpu_quic, num_quic_endpoints. get ( ) , quic_config. clone ( ) ) . unwrap ( ) ;
2921
+ bind_more_with_config ( tpu_quic, num_quic_endpoints. get ( ) , socket_config_reuseport)
2922
+ . unwrap ( ) ;
2900
2923
2901
2924
let ( tpu_forwards_port, tpu_forwards_sockets) =
2902
- multi_bind_in_range ( bind_ip_addr, port_range, 8 ) . expect ( "tpu_forwards multi_bind" ) ;
2925
+ multi_bind_in_range_with_config ( bind_ip_addr, port_range, socket_config_reuseport, 8 )
2926
+ . expect ( "tpu_forwards multi_bind" ) ;
2903
2927
2904
2928
let ( _tpu_forwards_port_quic, tpu_forwards_quic) = Self :: bind_with_config (
2905
2929
bind_ip_addr,
2906
2930
(
2907
2931
tpu_forwards_port + QUIC_PORT_OFFSET ,
2908
2932
tpu_forwards_port + QUIC_PORT_OFFSET + 1 ,
2909
2933
) ,
2910
- quic_config . clone ( ) ,
2934
+ socket_config_reuseport ,
2911
2935
) ;
2912
2936
let tpu_forwards_quic = bind_more_with_config (
2913
2937
tpu_forwards_quic,
2914
2938
num_quic_endpoints. get ( ) ,
2915
- quic_config . clone ( ) ,
2939
+ socket_config_reuseport ,
2916
2940
)
2917
2941
. unwrap ( ) ;
2918
2942
2919
2943
let ( tpu_vote_port, tpu_vote_sockets) =
2920
- multi_bind_in_range ( bind_ip_addr, port_range, 1 ) . expect ( "tpu_vote multi_bind" ) ;
2944
+ multi_bind_in_range_with_config ( bind_ip_addr, port_range, socket_config_reuseport, 1 )
2945
+ . expect ( "tpu_vote multi_bind" ) ;
2921
2946
2922
- let ( tpu_vote_quic_port, tpu_vote_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2947
+ let ( tpu_vote_quic_port, tpu_vote_quic) =
2948
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2923
2949
2924
- let tpu_vote_quic =
2925
- bind_more_with_config ( tpu_vote_quic, num_quic_endpoints. get ( ) , quic_config. clone ( ) )
2926
- . unwrap ( ) ;
2950
+ let tpu_vote_quic = bind_more_with_config (
2951
+ tpu_vote_quic,
2952
+ num_quic_endpoints. get ( ) ,
2953
+ socket_config_reuseport,
2954
+ )
2955
+ . unwrap ( ) ;
2927
2956
2928
2957
let ( _, retransmit_sockets) =
2929
- multi_bind_in_range ( bind_ip_addr, port_range, 8 ) . expect ( "retransmit multi_bind" ) ;
2958
+ multi_bind_in_range_with_config ( bind_ip_addr, port_range, socket_config_reuseport, 8 )
2959
+ . expect ( "retransmit multi_bind" ) ;
2960
+
2961
+ let ( _, repair) = Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2962
+ let ( _, repair_quic) = Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2930
2963
2931
- let ( _ , repair ) = Self :: bind ( bind_ip_addr , port_range ) ;
2932
- let ( _ , repair_quic ) = Self :: bind ( bind_ip_addr, port_range) ;
2933
- let ( serve_repair_port , serve_repair ) = Self :: bind ( bind_ip_addr , port_range ) ;
2934
- let ( serve_repair_quic_port , serve_repair_quic ) = Self :: bind ( bind_ip_addr, port_range) ;
2964
+ let ( serve_repair_port , serve_repair ) =
2965
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config ) ;
2966
+ let ( serve_repair_quic_port , serve_repair_quic ) =
2967
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config ) ;
2935
2968
2936
2969
let ( _, broadcast) =
2937
- multi_bind_in_range ( bind_ip_addr, port_range, 4 ) . expect ( "broadcast multi_bind" ) ;
2970
+ multi_bind_in_range_with_config ( bind_ip_addr, port_range, socket_config_reuseport, 4 )
2971
+ . expect ( "broadcast multi_bind" ) ;
2938
2972
2939
- let ( _, ancestor_hashes_requests) = Self :: bind ( bind_ip_addr, port_range) ;
2940
- let ( _, ancestor_hashes_requests_quic) = Self :: bind ( bind_ip_addr, port_range) ;
2973
+ let ( _, ancestor_hashes_requests) =
2974
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2975
+ let ( _, ancestor_hashes_requests_quic) =
2976
+ Self :: bind_with_config ( bind_ip_addr, port_range, socket_config) ;
2941
2977
2942
2978
let mut info = ContactInfo :: new (
2943
2979
* pubkey,
0 commit comments