1+ use std:: ffi:: c_int;
12use std:: future:: Future ;
23use std:: io:: Error ;
34use std:: pin:: Pin ;
2728 socket_server : TSocketService ,
2829 listener : tokio:: net:: TcpListener ,
2930 max_buffer_length : usize ,
31+ buffer_allocation_increment : usize ,
3032 max_queued_outbound_messages : usize ,
3133}
3234
@@ -38,13 +40,36 @@ where
3840 pub async fn new (
3941 address : std:: net:: SocketAddr ,
4042 socket_server : TSocketService ,
43+ max_buffer_length : usize ,
44+ buffer_allocation_increment : usize ,
45+ max_queued_outbound_messages : usize ,
46+ listen_backlog : u32 ,
4147 ) -> crate :: Result < Self > {
42- let listener = tokio:: net:: TcpListener :: bind ( address) . await ?;
48+ let socket = socket2:: Socket :: new (
49+ match address {
50+ std:: net:: SocketAddr :: V4 ( _) => socket2:: Domain :: IPV4 ,
51+ std:: net:: SocketAddr :: V6 ( _) => socket2:: Domain :: IPV6 ,
52+ } ,
53+ socket2:: Type :: STREAM ,
54+ None ,
55+ ) ?;
56+
57+ socket. set_nonblocking ( true ) ?;
58+ socket. set_tcp_nodelay ( true ) ?;
59+ socket. set_keepalive ( true ) ?;
60+ socket. set_reuse_port ( true ) ?;
61+ socket. set_reuse_address ( true ) ?;
62+
63+ socket. bind ( & address. into ( ) ) ?;
64+ socket. listen ( listen_backlog as c_int ) ?;
65+
66+ let listener = tokio:: net:: TcpListener :: from_std ( socket. into ( ) ) ?;
4367 Ok ( Self {
4468 socket_server,
4569 listener,
46- max_buffer_length : 16 * ( 2 << 20 ) ,
47- max_queued_outbound_messages : 128 ,
70+ max_buffer_length,
71+ buffer_allocation_increment,
72+ max_queued_outbound_messages,
4873 } )
4974 }
5075
84109 let serializer = self . socket_server . serializer ( ) ;
85110 let max_buffer_length = self . max_buffer_length ;
86111 let max_queued_outbound_messages = self . max_queued_outbound_messages ;
112+ let buffer_allocation_increment = self . buffer_allocation_increment ;
87113
88114 let stream_future = self . socket_server . accept_stream ( stream) ;
89115
97123 deserializer,
98124 serializer,
99125 max_buffer_length,
126+ buffer_allocation_increment,
100127 max_queued_outbound_messages,
101128 outbound_messages_receiver,
102129 submitter,
0 commit comments