gpt4 book ai didi

sockets - 是什么导致ENOTCONN错误?

转载 作者:行者123 更新时间:2023-12-03 13:31:10 44 4
gpt4 key购买 nike

我目前正在维护一些Web服务器软件,并且需要执行很多I/O操作。当在套接字上使用read()write()close()shutdown()调用时,有时可能会引发ENOTCONN错误。该错误的确切含义是什么?触发它的条件是什么?我似乎永远不可能在本地复制它,但是有些用户可以。

现在,当由ENOTCONNclose()引发时,我只是忽略shutdown(),因为它看起来无害,但我不确定。

编辑:

  • 我绝对确定connect()调用成功。我检查它的返回值。
  • ENOTCONN通常由close()shutdown()引发。我很少看到read()write()提高ENOTCONN的情况。
  • 最佳答案

    如果您确定TCP连接端没有任何东西正在关闭该连接,那么听起来像是远程端正在关闭该连接。

    正如其他人所指出的,ENOTCONN只是意味着套接字未连接。这并不一定意味着connect失败。套接字很可能以前已经连接过,只是在调用时才导致ENOTCONN

    这不同于:

  • ECONNRESET:连接的另一端发送了一个TCP重置数据包。如果另一端拒绝连接,或者不承认它已经连接,则可能发生这种情况。
  • ETIMEDOUT:这通常仅适用于connect。如果连接尝试在与系统有关的时间内未成功,则可能会发生这种情况。

  • 某些套接字相关的系统调用有时会在与 EPIPE大致相同的条件下返回 ENOTCONN。例如,在某些系统上, EPIPEENOTCONNsend返回时是同义词。

    尽管 shutdown返回 ENOTCONN并不罕见,但是由于此函数应该断开TCP连接,所以我很惊讶地看到 close返回 ENOTCONN。实际上,它绝对不应该那样做。

    最后,如dwc所述,除非您尝试对已经是 EBADF d的文件描述符进行某些操作,否则 close不应应用在您的方案中。使套接字断开连接(即TCP连接断开)与关闭与该套接字关联的文件描述符不同。

    关于sockets - 是什么导致ENOTCONN错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900042/

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