2013-01-07 23 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

相关问题