Windows 更新后返回 WSAEACCES 错误

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

去年,我终于将开发环境从Win10x64迁移到了Win11x64。旧的Win10电脑一直处于关机状态,除了极少数时候我需要在上面查找旧文件。当我从 W10 迁移到 W11 时,我开发的软件运行良好。昨天,我启动它,在一些测试中将其用作第二个主机,并且它想要应用一系列更新。

完成并重新启动几次后,我尝试启动我的软件,令我惊讶的是,所有将 TCP 套接字绑定()到本地(IPv4)地址/端口的尝试都失败并出现 WSAEACCES。由于这些程序在这台机器上已经工作了好几年了,毫不夸张地说,我不知道应该如何继续纠正这个问题。

我已尝试关闭所有防病毒和防火墙类型的安全性,但错误仍然出现。我尝试过仅使用内部 LOOPBACK 地址(在 Microsoft KM-TEST 环回适配器上)并使用物理适配器上的地址,得到相同的结果。

感觉非常像一个过度热心的安全更新,阻止任何东西将 TCP 套接字绑定到地址/端口。有趣的是,代码绑定UDP地址的两个地方都没有错误,所以这是TCP特定的。

感谢所有读到这里的人!更要感谢任何可以提供建议的人,告诉我如何纠正或至少更好地诊断哪些更改破坏了我曾经完美运行的旧代码(目前仍然在 Windows 11 和 Windows 10 上完美运行)以及多个客户站点的 Windows 7!)

哦,我们所有的代码都是简单的、原生的 C(不是 C++、MFC、.NET 或类似的代码),并且自 2023 年 12 月上次无错误运行以来一直没有更改(在 Win 10 计算机上)。

c windows winsock
1个回答
0
投票

发现其中一个更新保留了一堆以前在动态端口范围内的端口。如果您遇到此问题,请启动管理命令提示符并运行:

netsh int ipv4 show excludedportrange tcp

查看您的端口是否已列出。如果是,这些命令的这些版本(根据您的情况调整端口号和计数)可能会有所帮助:

net stop winnat
netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384
net start winnat

但请注意...重新启动后,Microsoft 可能会收回一些端口,因此您应该在执行此操作后启动,以确保您的端口仍然可用。如果没有,您可能需要选择新端口以避免 MS 干扰。

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