我有一个C ++程序,它使用Boost ASIO通过TCP套接字与网络设备进行通信。该程序在Linux上运行良好,但在Windows 7中,我发现通信效果不佳。经过一些实验,我发现使用ASIO示例telnet程序与设备通信时命令和响应之间有0.5秒的延迟,即使响应更快地显示在Wireshark中。
我认为问题在于网络设备在完成一大块数据后没有设置PSH标志。请参阅:http://smallvoid.com/article/winnt-tcp-push-flag.html。
我需要以某种方式设置我的应用程序,以便它从TCP套接字接收数据,无论数据包是否已经到达PSH位设置。我知道这一定是可能的,因为PuTTY可以正常地与我的设备通信。我宁愿不使用注册表项来获得效果,因为我只想为这一个套接字而不是整个系统更改行为。
要让Windows忽略此连接的PSH标志,我需要做什么?
答案 0 :(得分:1)
您可以尝试在接收方(https://msdn.microsoft.com/en-us/library/windows/desktop/ms741688(v=vs.85).aspx)指定MSG_PUSH_IMMEDIATE
标记。