network-programming - UDP sendto() 何时阻塞?

标签 network-programming udp blocking

在 UDP 套接字上使用默认(阻塞)行为时,在这种情况下,对 sendto() 的调用会阻塞吗?我基本上对 Linux 行为感兴趣。

对于 TCP,我知道如果发送窗口已满,拥塞控制会使 send() 调用阻塞,但是 UDP 呢?它有时甚至会阻塞还是只是让数据包在较低层被丢弃?

最佳答案

如果您填满了套接字缓冲区,则可能会发生这种情况,但它高度依赖于操作系统。由于 UDP 不提供任何保证,当您的套接字缓冲区已满时,您的操作系统可以决定做任何事情:阻塞或丢弃。您可以尝试增加 SO_SNDBUF 来临时缓解。

这甚至可能取决于系统的微调,例如它还可能取决于网络接口(interface)驱动程序中 TX 环的大小。 iperf mailing list 中有一些关于此的讨论。 ,但您确实想与您的操作系统的开发人员讨论这个问题。特别注意 O_NONBLOCK 和 EAGAIN/EWOULDBLOCK。

关于network-programming - UDP sendto() 何时阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165174/

相关文章:

java - 在 Java 中扭曲

networking - netstat -na : udp and state established?

c - 选择功能行为 - 多客户端测验

c# - UDP:从所有网络接口(interface)读取数据

linux - 如果网络出现故障,套接字会发生什么

java - 在 LAN 中保持客户端更新的最佳方式 - Java 网络

Python - UDP套接字绑定(bind)()到正确的地址

node.js - 为什么阻塞代码比非阻塞代码表现得更好?

python tcp socket - 为什么仅在 close() 之后发送 sendall 消息

iphone - 在 iOS 的 objective-c 中创建模式窗口