我相信以下将实现这一点,但您可能需要问自己您是否真的需要禁用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 apparently 将频率设置为 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);