gpt4 book ai didi

c++ - 读取 Windows 套接字上的 SIO_KEEPALIVE_VALS 字段(用于保持空闲和间隔时间)

转载 作者:可可西里 更新时间:2023-11-01 02:34:32 29 4
gpt4 key购买 nike

给定一个 Windows 套接字,我想确定它使用哪些值作为 TCP keepalive 空闲时间和 TCP keepalive 间隔时间(大致相当于 TCP_KEEPIDLETCP_KEEPINTVL Berkeley 套接字上的设置)。

我看到您可以使用 WSAIoctl 调用来设置这些值(请参阅 http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx)。但是,似乎没有任何 API 可以读取它们的当前值。我尝试使用填充的输出参数调用 WSAIoctl 但输入参数为 NULL,如下所示:

DWORD bytes_returned;
struct tcp_keepalive keepalive_opts;
int rv = WSAIoctl(socket, SIO_KEEPALIVE_VALS, NULL, 0, &keepalive_opts, sizeof(keepalive_opts), &bytes_returned, NULL, NULL);

但这会返回一个 WSAEFAULT(“系统在尝试在调用中使用指针参数时检测到无效指针地址。”)。

我可以使用输入和输出参数调用 WSAIoctl,但我不想设置值,我只想读取它们。据我所知,提供任何非 NULL 输入参数都会导致参数被设置为恰好位于该内存空间中的任何值(由 struct tcp_keepalive ; 再次参见 http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx )。

上面还强调了另一个不知道当前值是什么的问题:我不能只设置一个 keepalive idle time 或 keepalive interval time - 我必须同时清除两个(未知)值,因为它们都是我需要提供的结构的成员。

我知道我可以假设基于 Windows 文档设置的值,但我宁愿不假设。我看到了 http://technet.microsoft.com/en-us/library/bb726981.aspx#EDAA定义 KeepAliveIntervalKeepAliveTime 默认值。但是,我的 Windows 7 注册表中的 Parameters 文件夹不包含这些键中的任何一个,所以我真的不得不依赖这里的文档 100% 正确(知道套接字将接收的默认值),这比以编程方式糟糕得多检索它们(即使从注册表中检索它们也可能没问题,但以上经验表明我做不到)。

有什么方法可以获取 Windows 套接字的当前 TCP keepalive 空闲时间和 TCP keepalive 间隔时间值?

最佳答案

不像TCP_KEEPIDLETCP_KEEPINTVL,它们可以和getsockopt()一起使用,没有办法读取当前的SIO_KEEPALIVE_VALS 套接字的值,仅用于设置它们。

关于c++ - 读取 Windows 套接字上的 SIO_KEEPALIVE_VALS 字段(用于保持空闲和间隔时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391341/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com