如何使用Winsock查询套接字保持活动值

How to query socket keep alive values using Winsock?

本文关键字:活动 套接字 何使用 Winsock 查询      更新时间:2023-10-16

我正在为一个需要设置TCP Keep Alive选项值的Java应用程序编写一个JNI库。(它设置了Keep Alive超时和间隔的值)在大多数情况下,我认为我有它的工作,因为我可以从Java设置Keep Alive打开/关闭,并在c++代码中查询正确的结果。我可以设置其他两个选项,没有错误,但我不确定如何查询这些选项值。查询这些值以快速证明它们已被设置是很有用的。

任何想法?

唯一的限制是我使用c++, Winsock和目标操作系统是Windows XP或更高。

如何使用

  • http://msdn.microsoft.com/en-us/library/windows/desktop/ee470551 (v = vs.85) . aspx

魔词是getsockopt, setsockoptSO_KEEPALIVE

您可能还需要WSAIoctl:

  • http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220 (v = vs.85) . aspx

对于SIO_KEEPALIVE_VALS,系统没有任何方法检查传递给WSAIoctltcp_keepalive结构的电流值。您可以将它们设置为您想要的值,但您不能询问它们当前的值。

如果你想检查它们是否被尊重,你可以设置一个测试用例,使用wireshark或Network Monitor,看看值是什么。但请注意,如果系统不遵守设置,您可能无能为力。

但是,如果你试图重载TCP keepalive,你可能想看看我对这个问题的回答:

  • Asyncsockets and "silent"断开连接