首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetPerTcpConnectionEStats和GetPerTcpConnectionEStats返回错误代码1214 (无效的网络名称)

SetPerTcpConnectionEStats和GetPerTcpConnectionEStats返回错误代码1214 (无效的网络名称)
EN

Stack Overflow用户
提问于 2020-08-28 01:19:03
回答 1查看 199关注 0票数 0

我正在尝试获取类似于我的c++服务窗口中的“资源监视器”中显示的统计数据。为此,我使用了https://docs.microsoft.com/en-gb/windows/win32/api/iphlpapi/nf-iphlpapi-getpertcp6connectionestats?redirectedfrom=MSDN中所示的示例。但是我被卡住了,因为SetPerTcpConnectionEStats和GetPerTcpConnectionEStats返回了错误代码1214。唯一的区别是btn。在上面提到的link和我的示例中的代码是,我不是在一个特定的本地和远程端口上工作,而是在tcp表中的所有条目上工作,但我认为这不会有什么不同。

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-28 14:52:38

如果我处理所有的条目,我可以重现这个错误。根据您链接的示例,除了本地和远程端口之外,GetTcpRow还有一个搜索参数MIB_TCP_STATE_ESTAB。该状态是TCP连接的数据传输阶段的正常状态。

下面的示例适用于我。

代码语言:javascript
复制
DWORD RunEstatsTest(bool v6) //set as IPv4(FALSE)
{
    PMIB_TCPTABLE tcpTable = NULL;

    DWORD status, size = 0;

    status = GetTcpTable(tcpTable, &size, TRUE);
    if (status != ERROR_INSUFFICIENT_BUFFER) {
        return status;
    }
    tcpTable = (PMIB_TCPTABLE)malloc(size);
    if (tcpTable == NULL) {
        return ERROR_OUTOFMEMORY;
    }
    status = GetTcpTable(tcpTable, &size, TRUE);
    if (status != ERROR_SUCCESS) {
        free(tcpTable);
        return status;
    }

    for (int i = 0; i < tcpTable->dwNumEntries; i++) {
        if (MIB_TCP_STATE_ESTAB == tcpTable->table[i].State)
        {
            ToggleAllEstats(&tcpTable->table[i], TRUE, v6);

            GetAllEstats(&tcpTable->table[i], v6);

            ToggleAllEstats(&tcpTable->table[i], FALSE, v6);
        }
    }
    free(tcpTable);
    return ERROR_SUCCESS;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63621163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档