2015-10-15 77 views
2

我有一個C++程序,它使用Boost ASIO通過TCP套接字與網絡設備進行通信。該程序在Linux上運行良好,但對於Windows 7,我發現通信不能很好地工作。經過一番實驗後,我發現在使用ASIO示例telnet程序與設備進行通信時,命令和響應之間存在0.5秒的延遲,儘管響應在Wireshark中顯示得更快。如何忽略Windows 7中的TCP PSH位?

我收集問題是,網絡設備在完成一塊數據後未設置PSH標誌。請參閱:http://smallvoid.com/article/winnt-tcp-push-flag.html

我需要以某種方式設置我的應用程序,以便它從TCP套接字接收數據,而不管數據包是否已經到達PSH位集。我知道這一定是可能的,因爲PuTTY可以正常地與我的設備通信。我寧願不使用註冊表鍵來獲得效果,因爲我只想改變這個套接字的行爲,而不是整個系統。

我需要做些什麼來讓Windows忽略此連接的PSH標誌?

+1

PSH標誌基本上沒有意義。它通常沒有設置,並且在設置時幾乎普遍被忽略。 BSD套接字API原來的概念已經不復存在。 – EJP

+1

我想你可能已經_gathered_ a [紅鯡魚](https://en.wikipedia.org/wiki/Red_herring)。小心分享一個SSCCE? – sehe

+0

它似乎需要一個不會設置PSH位的TCP堆棧,但是鑑於此,您只需要運行Boost.ASIO telnet客戶端示例的Windows 7計算機:http://lists.boost.org/boost-用戶/ ATT-40895/telnet.cpp。 – Brian

回答