【问题标题】:Can recv return EHOSTUNREACH?recv 可以返回 EHOSTUNREACH 吗?
【发布时间】:2015-10-11 06:06:58
【问题描述】:

根据 Stevens 的 Unix Network Programming,使用 readline\recv 时可以返回 EHOSTUNREACH。 但是,在 linux 手册页中,recv 无法接收 EHOSTUNREACH。

谁是对的?

【问题讨论】:

    标签: sockets unix recv


    【解决方案1】:

    如果通信发生错误,错误将被设置在套接字上,并与下一个与套接字相关的系统调用一起传递。 EHOSTUNREACH 错误可以(除其他外)通过向目标发送 UDP 数据包并返回 ICMP 无法访问来触发。由于此 ICMP 消息仅在 send 调用完成后返回,因此不会为 send 返回,而只会在套接字上的下一个系统调用(也可能是 recv)时返回。

    因此,我建议在 Linux 中也可以返回此错误,但我可能错了。一般来说,Linux 不是 UNIX,系统不断发展,文档经常存在缺陷。如果您查看各种平台上的 recv 文档,您会看到 OpenBSD documents EHOSTUNREACHABLE 可能是错误,而 FreeBSD、NetBSD、Linux... 则不会。我建议你最好期待意外:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 2014-04-22
      • 2016-02-08
      • 2012-07-06
      • 2016-10-17
      • 2010-11-10
      • 2023-03-13
      相关资源
      最近更新 更多