在不知道套接字的情况下关闭网络连接

时间:2018-10-16 15:37:30

标签: c++ sockets winapi winsock

我正在尝试找到一种方法来关闭由另一个进程建立的网络连接。我的应用程序将自动运行一整夜。如果网络资源已经在使用中(本不应该,但我没有假设),我需要先关闭连接,然后再使用正确的凭据建立连接。同样,不要假设现有连接具有正确的访问权限。

使用GetTcpTable()我可以在现有连接中搜索IP。现在我需要关闭它。我可以找到许多有关基于套接字的套接字关闭连接的信息,但我不知道套接字。是否可以找出给定的连接使用了哪些套接字(基于远程IP?),或者有其他方法可以关闭基于远程IP的网络连接吗?

2 个答案:

答案 0 :(得分:0)

借助注释,我组合了以下功能。但是请注意,在Windows Vista及更高版本上使用SetTcpEntry需要管理员特权。尽管这回答了上面的明确问题,但我仍在寻找用户不可知的解决方案。

// Fuction to close a collection of network connections
void networkConn::CloseRemoteIP(std::vector<MIB_TCPROW>& rows) {
    for (MIB_TCPROW tcpObject : rows) {
        tcpObject.dwState = MIB_TCP_STATE_DELETE_TCB;

        DWORD ret = SetTcpEntry(&tcpObject);

        if (ret) {
            printf("\nError closing TCP connection. Windows returned: %lu", ret);
        }
    }
}

答案 1 :(得分:-1)

在UNIX上,我可以通过通过本地ssh(使用ssh客户端上的-N -L开关)建立连接的隧​​道来建立连接,并在需要终止连接时终止ssh。不确定Windows上的方便程度。