为什么UDP无连接时UDP发送需要超时?

use*_*953 2 sockets networking udp timeout

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

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

提前致谢。

use*_*421 6

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

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