@@ -21,6 +21,7 @@ mod rootfs;
2121#[ doc( hidden) ]
2222pub mod router;
2323mod suid;
24+ mod tcp_cong;
2425mod tls;
2526mod unixuser;
2627mod userfs;
@@ -458,7 +459,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
458459
459460 // Plaintext servers.
460461 for sockaddr in addrs {
461- let listener = match make_listener ( sockaddr) {
462+ let listener = match make_listener ( & config . server , sockaddr) {
462463 Ok ( l) => l,
463464 Err ( e) => {
464465 eprintln ! ( "{}: listener on {:?}: {}" , PROGNAME , & sockaddr, e) ;
@@ -495,7 +496,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
495496
496497 for sockaddr in tls_addrs {
497498 let tls_acceptor = tls_acceptor. clone ( ) ;
498- let listener = make_listener ( sockaddr) . unwrap_or_else ( |e| {
499+ let listener = make_listener ( & config . server , sockaddr) . unwrap_or_else ( |e| {
499500 eprintln ! ( "{}: listener on {:?}: {}" , PROGNAME , & sockaddr, e) ;
500501 exit ( 1 ) ;
501502 } ) ;
@@ -624,9 +625,17 @@ fn expand_directory(dir: &str, pwd: Option<&Arc<unixuser::User>>) -> Result<Stri
624625
625626// Make a new TcpListener, and if it's a V6 listener, set the
626627// V6_V6ONLY socket option on it.
627- fn make_listener ( addr : SocketAddr ) -> io:: Result < tokio:: net:: TcpListener > {
628+ fn make_listener ( srv : & config :: Server , addr : SocketAddr ) -> io:: Result < tokio:: net:: TcpListener > {
628629 use socket2:: { Domain , SockAddr , Socket , Type , Protocol } ;
629630 let s = Socket :: new ( Domain :: for_address ( addr) , Type :: STREAM , Some ( Protocol :: TCP ) ) ?;
631+ if let Some ( cong) = srv. congestion_control . as_ref ( ) {
632+ tcp_cong:: set_congestion_control ( & s, cong) . map_err ( |e| {
633+ io:: Error :: new (
634+ io:: ErrorKind :: InvalidData ,
635+ format ! ( "congestion control {}: {}" , cong, e) ,
636+ )
637+ } ) ?;
638+ }
630639 if addr. is_ipv6 ( ) {
631640 s. set_only_v6 ( true ) ?;
632641 }
0 commit comments