【问题标题】:What is the correct way to dispose of a socket returned from accept()?处理从 accept() 返回的套接字的正确方法是什么?
【发布时间】:2015-11-27 09:14:26
【问题描述】:

处理从accept() 返回的套接字的正确方法是什么?

我们在我们的代码上运行 Klocwork,尽管使用了closesocket(),它仍然抱怨资源泄漏。这可能是误报还是有更好/正确的方法来处理返回的套接字?

MSDN documentation 中有一个accept() 的示例,但它不包括任何清理。

【问题讨论】:

  • 在接受连接后,您的代码是否有可能最终调用 closesocket()?例如,它是否会抛出任何会导致 closesocket() 不被调用(并因此导致资源泄漏)的异常?静态代码分析可以识别出这些“提前退出”或执行流程的变化,这些变化通过阅读代码可能不会立即显现出来。
  • 不,它会单独标记这些,例如三个不同的代码路径 = 三个不同的资源泄漏标志。
  • MSDN 代码有问题。 'closesocket(ListenSocket);'在两个地方被调用。其中一个应该已经关闭了接受套接字。

标签: c windows sockets klocwork


【解决方案1】:

处理从accept 返回的套接字的正确方法是在其上调用closesocket

要么您的代码由于某种原因并不总是调用closesocket,要么这是误报。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多