如何使用Winsock查询套接字保持活动值
How to query socket keep alive values using Winsock?
我正在为一个需要设置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
, setsockopt
和SO_KEEPALIVE
。
您可能还需要WSAIoctl:
- http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220 (v = vs.85) . aspx
对于SIO_KEEPALIVE_VALS
,系统没有任何方法检查传递给WSAIoctl
的tcp_keepalive
结构的电流值。您可以将它们设置为您想要的值,但您不能询问它们当前的值。
如果你想检查它们是否被尊重,你可以设置一个测试用例,使用wireshark或Network Monitor,看看值是什么。但请注意,如果系统不遵守设置,您可能无能为力。
但是,如果你试图重载TCP keepalive,你可能想看看我对这个问题的回答:
- Asyncsockets and "silent"断开连接
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 如何使用boost::asio保持套接字连接活动
- 如何使用Winsock查询套接字保持活动值