@@ -27,6 +27,12 @@ use windows_sys::Win32::Networking::WinSock::{
2727 SOCKET_ERROR , WSABUF , WSAEMSGSIZE , WSAESHUTDOWN , WSAPOLLFD , WSAPROTOCOL_INFOW ,
2828 WSA_FLAG_NO_HANDLE_INHERIT , WSA_FLAG_OVERLAPPED , WSA_FLAG_REGISTERED_IO ,
2929} ;
30+
31+ #[ cfg( feature = "all" ) ]
32+ use windows_sys:: Win32 :: Networking :: WinSock :: {
33+ SIO_TCP_SET_ACK_FREQUENCY , TCP_ACK_FREQUENCY_PARAMETERS ,
34+ } ;
35+
3036#[ cfg( feature = "all" ) ]
3137use windows_sys:: Win32 :: Networking :: WinSock :: {
3238 IP6T_SO_ORIGINAL_DST , SOL_IP , SO_ORIGINAL_DST , SO_PROTOCOL_INFOW ,
@@ -798,6 +804,31 @@ pub(crate) fn set_tcp_keepalive(socket: RawSocket, keepalive: &TcpKeepalive) ->
798804 Ok ( ( ) )
799805}
800806
807+ #[ cfg( feature = "all" ) ]
808+ pub ( crate ) fn set_tcp_ack_frequency ( socket : RawSocket , frequency : u8 ) -> io:: Result < ( ) > {
809+ let mut freq_params = TCP_ACK_FREQUENCY_PARAMETERS {
810+ TcpDelayedAckFrequency : frequency,
811+ } ;
812+
813+ let mut out = 0 ;
814+ syscall ! (
815+ WSAIoctl (
816+ socket,
817+ SIO_TCP_SET_ACK_FREQUENCY ,
818+ & mut freq_params as * mut _ as * mut _,
819+ size_of:: <TCP_ACK_FREQUENCY_PARAMETERS >( ) as _,
820+ ptr:: null_mut( ) ,
821+ 0 ,
822+ & mut out,
823+ ptr:: null_mut( ) ,
824+ None ,
825+ ) ,
826+ PartialEq :: eq,
827+ SOCKET_ERROR
828+ )
829+ . map ( |_| ( ) )
830+ }
831+
801832/// Caller must ensure `T` is the correct type for `level` and `optname`.
802833// NOTE: `optname` is actually `i32`, but all constants are `u32`.
803834pub ( crate ) unsafe fn getsockopt < T > ( socket : RawSocket , level : c_int , optname : i32 ) -> io:: Result < T > {
0 commit comments