【发布时间】:2015-10-11 06:06:58
【问题描述】:
根据 Stevens 的 Unix Network Programming,使用 readline\recv 时可以返回 EHOSTUNREACH。 但是,在 linux 手册页中,recv 无法接收 EHOSTUNREACH。
谁是对的?
【问题讨论】:
根据 Stevens 的 Unix Network Programming,使用 readline\recv 时可以返回 EHOSTUNREACH。 但是,在 linux 手册页中,recv 无法接收 EHOSTUNREACH。
谁是对的?
【问题讨论】:
如果通信发生错误,错误将被设置在套接字上,并与下一个与套接字相关的系统调用一起传递。 EHOSTUNREACH 错误可以(除其他外)通过向目标发送 UDP 数据包并返回 ICMP 无法访问来触发。由于此 ICMP 消息仅在 send 调用完成后返回,因此不会为 send 返回,而只会在套接字上的下一个系统调用(也可能是 recv)时返回。
因此,我建议在 Linux 中也可以返回此错误,但我可能错了。一般来说,Linux 不是 UNIX,系统不断发展,文档经常存在缺陷。如果您查看各种平台上的 recv 文档,您会看到 OpenBSD documents EHOSTUNREACHABLE 可能是错误,而 FreeBSD、NetBSD、Linux... 则不会。我建议你最好期待意外:)
【讨论】: