IStaticPortMappingCollection :: Add始终返回HRESULT_FROM_WIN32(ERROR_BUSY)

问题描述 投票:0回答:1

我正在尝试使用Windows UPnP API将外部端口映射到内部端口。 UPnP已启用并可以与系统上安装的软件一起使用,但是我似乎无法在自己的代码中使用它。呼叫看起来像这样:

wrl::ComPtr< IStaticPortMappingCollection > staticPortMappings;
auto res = sm_impl->upnpNat->get_StaticPortMappingCollection( &staticPortMappings ); 
// Where sm_impl->upnpNat is a previously initialized IUPnPNAT pointer.

long ct = 0;
staticPortMappings->get_Count( &ct );

wrl::ComPtr< IStaticPortMapping > portMapping;

res = staticPortMappings->Add(
    port,
    CComBSTR( protocol.c_str( ) ).m_str,
    port,
    CComBSTR( clientName.c_str( ) ).m_str,
    VARIANT_TRUE,
    CComBSTR( description.c_str( ) ).m_str,
    &portMapping
);

res将始终为HRESULT_FROM_WIN32(ERROR_BUSY)。 MSDN文档未将其列为典型的返回码,也未解释为什么会得到此返回码或如何处理。

windows upnp
1个回答
0
投票

这意味着外部端口号(staticPortMappings-> Add中的第一个参数)已在使用中。尝试添加另一个端口。

© www.soinside.com 2019 - 2024. All rights reserved.