Я верю, что следующее достигнет этого, но вы, вероятно, должны спросить себя, действительно ли вам нужно отключить TCP Delayed Acknowledgement
. Возможно, вы обнаружите, что приложение будет работать без него.
// Disable TCP Delayed Acknowledgement on a socket
int SIO_TCP_SET_ACK_FREQUENCY = unchecked((int)0x98000017);
var outputArray = new byte[128];
var bytesInOutputArray = tcpClient.Client.IOControl(SIO_TCP_SET_ACK_FREQUENCY,BitConverter.GetBytes(1), outputArray);
outputArray останется неизменным, а значение bytesInOutputArray будет равно 0.
За многие годы я видел в некоторых местах, что TCP_QUICKACK работает на Windows, хотя и без документов, его значение равно 12 (так же, как Linux). Но вы не можете передать его из C#, Socket.SetSocketOption
не примет его.
#define TCP_QUICKACK 12
Другой недокументированный параметр - SIO_TCP_SET_ACK_FREQUENCY
, по-видимому , устанавливающий частоту в значение из 1 отключает задержанное подтверждение TCP.
C ++ хотел бы это
#define SIO_TCP_SET_ACK_FREQUENCY _WSAIOW(IOC_VENDOR,23)
result = WSAIoctl(socket, SIO_TCP_SET_ACK_FREQUENCY, &frequency, sizeof(frequency), NULL, 0, &bytes, NULL, NULL);