【发布时间】:2013-12-10 08:32:14
【问题描述】:
我曾在非阻塞 TCP 中工作,因为在非阻塞情况下读取和写入都可能失败。如果没有可用数据,TCP 非阻塞读取可能会失败,如果对端的 TCP 缓冲区已满(我希望 TCP 缓冲区大小为 64K),则 TCP 写入可能会失败。
类似地,如果没有可用数据,UDP 读取 (recvfrom) 可能会失败。但是 UDP 写入的失败案例是什么(sendto)。我认为在 UDP 写入中不会有任何非块错误。因为 TCP write 发送数据并等待来自另一端的 ACK。但是对于 UDP 写入,情况并非如此,它只会发送并出来,并且不会等待来自对等方的任何 ACK。如果它不发送到另一端意味着它的数据包丢失。
我对UDP非阻塞写的理解是否正确?请解释一下?
【问题讨论】:
-
可能有很多原因。当你写失败时,你检查 errno 的值是多少?
标签: c sockets network-programming udp nonblocking