File tree 3 files changed +27
-0
lines changed 3 files changed +27
-0
lines changed Original file line number Diff line number Diff line change
1
+ Add socket option ReusePortLb for FreeBSD.
Original file line number Diff line number Diff line change @@ -270,6 +270,16 @@ sockopt_impl!(
270
270
libc:: SO_REUSEPORT ,
271
271
bool
272
272
) ;
273
+ #[ cfg( target_os = "freebsd" ) ]
274
+ sockopt_impl ! (
275
+ /// Enables incoming connections to be distributed among N sockets (up to 256)
276
+ /// via a Load-Balancing hash based algorithm.
277
+ ReusePortLb ,
278
+ Both ,
279
+ libc:: SOL_SOCKET ,
280
+ libc:: SO_REUSEPORT_LB ,
281
+ bool
282
+ ) ;
273
283
#[ cfg( feature = "net" ) ]
274
284
sockopt_impl ! (
275
285
#[ cfg_attr( docsrs, doc( cfg( feature = "net" ) ) ) ]
Original file line number Diff line number Diff line change @@ -859,3 +859,19 @@ fn test_utun_ifname() {
859
859
let expected_name = format ! ( "utun{}" , unit - 1 ) ;
860
860
assert_eq ! ( name. into_string( ) , Ok ( expected_name) ) ;
861
861
}
862
+
863
+ #[ test]
864
+ #[ cfg( target_os = "freebsd" ) ]
865
+ fn test_reuseport_lb ( ) {
866
+ let fd = socket (
867
+ AddressFamily :: Inet6 ,
868
+ SockType :: Datagram ,
869
+ SockFlag :: empty ( ) ,
870
+ None ,
871
+ )
872
+ . unwrap ( ) ;
873
+ setsockopt ( & fd, sockopt:: ReusePortLb , & false ) . unwrap ( ) ;
874
+ assert ! ( !getsockopt( & fd, sockopt:: ReusePortLb ) . unwrap( ) ) ;
875
+ setsockopt ( & fd, sockopt:: ReusePortLb , & true ) . unwrap ( ) ;
876
+ assert ! ( getsockopt( & fd, sockopt:: ReusePortLb ) . unwrap( ) ) ;
877
+ }
You can’t perform that action at this time.
0 commit comments