可以recv return EHOSTUNREACH吗?

Can recv return EHOSTUNREACH?

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

谁是对的?

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

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