【问题标题】:Why timeout is needed for UDP send when UDP is connectionless?当 UDP 无连接时,为什么 UDP 发送需要超时?
【发布时间】:2013-11-13 05:36:57
【问题描述】:

所以我看到在通过 UDP 数据包发送数据时提供了一些方法来指定超时值(至少在 C# 中看到了)。我想知道它的用途是什么,因为我认为 UDP 是一个无连接协议,所有发送方套接字所要做的只是发送数据包而不用担心实际接收到的数据包。接收超时是有意义的,但我不确定为什么需要发送超时。谁能解释一下?

这就引出了另一个问题,UDP 发送是否阻塞? (我会说不是)。如果是,它会在哪些事情上被“阻止”?

提前致谢。

【问题讨论】:

  • 超时不是需要的它是可选的,通常不会使用它。

标签: sockets networking udp timeout


【解决方案1】:

这两个问题的答案相同。 send() 只是将数据报复制到套接字发送缓冲区,然后由操作系统在后台发送到网络。如果缓冲区已满,则阻塞。对于 UDP,如果您发送数据报的速度快于操作系统将它们写入网络的速度,则缓冲区可能会填满。

套接字可以是阻塞的(默认)或非阻塞的,无论是 TCP 还是 UDP。

【讨论】:

  • 谢谢。因此,如果缓冲区已满且等待时间超过给定的超时值,则调用返回/抛出异常?
  • 我看不出还有什么意思。
猜你喜欢
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
相关资源
最近更新 更多