【发布时间】:2014-05-14 12:25:01
【问题描述】:
当您尝试将recv 从套接字发送到不足以存储整个数据报的缓冲区时会发生什么?可以存储的数据报中的大部分是recv'd 吗?其余的会丢失吗?还是会在后续调用 recv 时返回?
有没有办法确保读取整个数据报而不管其大小?
【问题讨论】:
标签: sockets networking udp
当您尝试将recv 从套接字发送到不足以存储整个数据报的缓冲区时会发生什么?可以存储的数据报中的大部分是recv'd 吗?其余的会丢失吗?还是会在后续调用 recv 时返回?
有没有办法确保读取整个数据报而不管其大小?
【问题讨论】:
标签: sockets networking udp
通常,(在 Windows/Linux 上),数据报会被截断以适应传递的缓冲区,而剩余的数据会永久丢失。
有没有办法确保读取整个数据报而不管 他们的大小?
使用 64K 缓冲区。 UDP 协议确保数据报不能大于该值,因此所有成功接收的数据报都将被完全读取,无论其大小。
【讨论】:
send超过64K,数据会被拆分成多个数据报,还是会导致操作失败?
这取决于平台。遵循单一 Unix 规范的系统(例如、Linux)将截断数据报以适应并丢弃剩余部分。
【讨论】: