我尝试在密集并行建立tcp连接时检索Windows tcp表。
在code example中,一项任务是建立许多tcp连接并且不释放它们,最终导致SocketException
,而另一项任务是与iphlpapi.dll
并行读取tcp表。当发生第一个任务中的SocketException
时,所有先前的连接都将释放,并重复相同的循环。
因此,在我的计算机上,tcp表已被很好地读取,并且未引发任何异常。但是在其他机器上,相同的代码使GetExtendedTcpTable
返回未记录的错误代码-1073741823
,从而使代码抛出在line 98上。
此错误代码是什么,为什么它仅在特定计算机上出现?
问题无法很好地进行搜索。我发现只提出了一个相关的issue,也没有任何评论解释这种错误代码的起源。
答案 0 :(得分:3)
可能是STATUS_UNSUCCESSFUL,这是相当通用的,实际上这些WinSTAT函数不应该真正返回这些NTSTATUS代码。
我建议您在收到此错误时仅重试失败的呼叫。由于未知,您不应该永远重试,在x次尝试和/或几秒钟后放弃。
对于GetTcpTable
MSDN says:
STATUS_UNSUCCESSFUL :
如果收到此返回码,则再次调用该函数通常足以解决问题并获得所需的结果。此返回码可能是系统承受高负载的结果。例如,如果TCP连接表的大小连续3次更改了2个以上的附加项。