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

时间:2013-11-01 22:43:48

标签: sockets networking udp timeout

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

这提出了另一个问题,UDP发送阻塞? (我会说不)。如果是的话,它被“阻止”了什么?

提前致谢。

1 个答案:

答案 0 :(得分:3)

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

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