为什么UDP不向应用程序返回异步错误?

时间:2014-12-16 05:51:29

标签: asynchronous udp

在UNP v1中,它表示如果没有在UDP套接字上调用connect,则此UDP套接字不会向上层应用程序返回异步错误(如“port unreach”)。其推理列于第8.9节:

  

UDP客户端在单个UDP套接字上发送三个UDP数据报   对于不同主机上的三台服务器,此UDP客户端调用recvfrom等待来自这3台服务器的回复。假设两台主机正在运行服务器,而第三台主机没有运行服务器。因此,第三个主机将向此UDP客户端返回带有“port unreach”的ICMP错误。如果recvfrom想要返回此ICMP错误,它必须告诉客户端目标IP /端口,以便此客户端知道哪个数据报引发了错误。但由于recvfrom无法将目标IP /端口返回给客户端,因此recvfrom也无法返回此ICMP错误,相反,recvfrom将阻止....

因此,在阅读本文之后,我可以看到其原因是“因为recvfrom无法在出错时将目标IP /端口返回给调用者,因此recvfrom无法返回异步错误(port unreach)。”但是为什么不能在返回目标IP /端口时出现错误?首先,ICMP消息包含IP头和UDP头,因此内核可以知道目标IP /端口对,第二个,recvfrom的第五个和第六个参数可用于将此IP /端口对返回到客户端应用程序。这看起来很合理吧?所以任何人都可以解释:

  1. 为什么recvfrom在出错时无法将目标IP /端口返回给调用者(如端口重传)?
  2. 为什么recvfrom无法返回异步错误(如端口重传)?

0 个答案:

没有答案