【发布时间】:2015-11-27 09:14:26
【问题描述】:
处理从accept() 返回的套接字的正确方法是什么?
我们在我们的代码上运行 Klocwork,尽管使用了closesocket(),它仍然抱怨资源泄漏。这可能是误报还是有更好/正确的方法来处理返回的套接字?
MSDN documentation 中有一个accept() 的示例,但它不包括任何清理。
【问题讨论】:
-
在接受连接后,您的代码是否有可能不最终调用 closesocket()?例如,它是否会抛出任何会导致 closesocket() 不被调用(并因此导致资源泄漏)的异常?静态代码分析可以识别出这些“提前退出”或执行流程的变化,这些变化通过阅读代码可能不会立即显现出来。
-
不,它会单独标记这些,例如三个不同的代码路径 = 三个不同的资源泄漏标志。
-
MSDN 代码有问题。 'closesocket(ListenSocket);'在两个地方被调用。其中一个应该已经关闭了接受套接字。
标签: c windows sockets klocwork