2013-01-07 24 views
0

我正在爲需要設置TCP Keep Alive選項的值的Java應用程序編寫JNI庫。 (它設置Keep Alive Timeout和Interval的值)大多數情況下,我認爲我已經可以工作了,因爲我可以設置Java的Keep Alive開關狀態,並在C++代碼中以正確的結果查詢它。我可以設置其他兩個選項,並且沒有錯誤,但我不確定如何查詢這些選項值。查詢這些值以快速證明它們已被設置將是有用的。如何使用Winsock查詢套接字保持活動值?

任何想法?

只有約束條件是我使用的是C++,Winsock,目標操作系統是Windows XP或更高版本。

回答

0

在這裏看到如何:

神奇的話是getsockoptsetsockoptSO_KEEPALIVE

你也可能需要的WSAIoctl:

系統沒有檢查tcp_keepalive結構傳遞到WSAIoctlSIO_KEEPALIVE_VALS的當前值的任何方法。你可以將它們設置爲你想要的值,但是你不能詢問它們現在是什麼。

如果你想檢查他們是否被尊重,你可以設置一個測試用例,並使用wireshark或網絡監視器,看看它們的值是什麼。但請注意,如果系統無法履行設置,則可能無法做到這一點。

然而,如果試圖超載與應用水平意義TCP保活,你可能會想看看我這個問題的答案:

+0

不幸的是,那些沒有幫助查詢我需要的額外選項。我已經使用getsockopt,setsockopt和WSAIoctl,但據我所知,這些不公開Keep Alive Interval和Keep Alive Timeout的值。 – Alex

+0

@Alex,您可以使用傳遞給'WSAIoctl'的'tcp_keepalive'結構中相應的條目來爲'SIO_KEEPALIVE_VALS'設置所需的值。不知道你還想要什麼?如果您只想檢查該值是否符合要求,請設置測試用例並使用wireshark查看數據包是否已經過去。 – Ben

+1

對,我已經可以設置選項。我想**現在**他們,但這似乎不可能。 Wireshark是一個很好的建議,但不是很自動化,這將是我的下一個擔憂。謝謝。 – Alex

相關問題