Sockets UDP消息是原子的吗?
如果我在UDP套接字上发送一些字节序列(即,在单个Sockets UDP消息是原子的吗?,sockets,udp,Sockets,Udp,如果我在UDP套接字上发送一些字节序列(即,在单个send调用中),接收套接字是否可能只接收传输消息的一部分(忽略缓冲区过小的情况)。或者字节序列是全部传递还是完全不传递,但绝不是部分传递还是多组传递?UDP不保证来自机器A的负载将传递到机器B。在数据传输过程中,承载发送()调用负载的数据报可能会丢失。机器B将只向应用程序传递它到达那里的信息。部分原始有效载荷可能仍在飞行中(或丢失)。是。UDP数据报被完整地传递,或者根本不传递。UDP有o保证传递,但从客户端的角度来看,当收到数据报时,它保证是
send
调用中),接收套接字是否可能只接收传输消息的一部分(忽略缓冲区过小的情况)。或者字节序列是全部传递还是完全不传递,但绝不是部分传递还是多组传递?UDP不保证来自机器A的负载将传递到机器B。在数据传输过程中,承载发送()调用负载的数据报可能会丢失。机器B将只向应用程序传递它到达那里的信息。部分原始有效载荷可能仍在飞行中(或丢失)。是。UDP数据报被完整地传递,或者根本不传递。UDP有o保证传递,但从客户端的角度来看,当收到数据报时,它保证是完整的。机器B将传递整个数据报,或者什么也不传递-1@EJP-1,真的吗?我从来没有说过数据报可以部分交付。我说的是有效载荷,即send()
缓冲区的内容。在这里,你的-1绝对不合适。同样,这是一个没有区别的区别。每个send()调用都会发送一个数据报。我认为问题不在于数据报本身,而在于send()调用中发送的缓冲区的全部内容。至少我是这样理解的。@Asbkarf一个没有区别的区别。“在send()调用中发送的缓冲区的全部内容”是一个数据报。即使它比MTU大?如果它比MTU大,它可能根本不会被发送。它当然不会被分割成多个数据报,如果你是这样想的话。我明白了,这意味着它可能(也可能不是)被低层协议分割,但仍然是一个UDP数据报。现在明白了。