gpt4 book ai didi

c++ - 应用程序崩溃后套接字仍在监听

转载 作者:太空狗 更新时间:2023-10-29 21:29:35 27 4
gpt4 key购买 nike

我的一个 C++ 应用程序在 Windows 2008x64 上出现问题(同一应用程序在 Windows 2003x64 上运行良好)。

在崩溃后,甚至有时在定期关闭/重启循环后,它在使用端口 82 上的套接字时遇到问题,它需要接收命令。

查看netstat我看到socket在应用程序停止后10多分钟仍处于监听状态(该进程肯定不再运行了)。

  TCP    0.0.0.0:82             LISTENING

我尝试将套接字选项设置为 REUSEADDR,但据我所知,这只会影响重新连接到处于 TIME_WAIT 状态的端口。无论哪种方式,此更改似乎都没有任何区别。

int doReuse = 1;
setsockopt(listenFd, SOL_SOCKET, SO_REUSEADDR,
(const char *)&doReuse, sizeof(doReuse));

有什么想法可以解决或至少避免这个问题吗?

编辑:

做了 netstat -an 但这就是我得到的:

  TCP    0.0.0.0:82             0.0.0.0:0              LISTENING

对于 netstat -anb 我得到:

  TCP    0.0.0.0:82             0.0.0.0:0              LISTENING
[System]

我知道正常关闭,但即使应用程序因某种原因崩溃,我仍然需要能够重新启动它。有问题的应用程序使用内部库,该库在内部使用 Windows Sockets API。

编辑:

显然这个问题没有解决方案,所以为了开发,我将使用代理/工具来解决它。感谢所有建议,非常感谢。

最佳答案

如果这只是在调试时对您造成伤害,请使用 tcpview来自 sysinternals 的人强制关闭套接字。我假设它适用于您的平台,但我不确定。

如果您在任何套接字上执行阻塞操作,请不要使用无限期超时。根据我的经验,这可能会导致多处理器机器出现奇怪的行为。我不确定它是什么 Windows 服务器操作系统,但是,它是 2003 Server 之前的一个或两个版本。不要无限期超时,而是使用 30 到 60 秒的超时,然后重复等待。这也适用于重叠的 IO 和 IOCompletion 端口,如果您正在使用它们的话。

如果这是您发布供他人使用的应用程序,祝您好运。 Windows 在使用套接字时可能是一个纯粹的 SCSS ......

关于c++ - 应用程序崩溃后套接字仍在监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com