Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets UDP消息是原子的吗?_Sockets_Udp - Fatal编程技术网

Sockets UDP消息是原子的吗?

Sockets UDP消息是原子的吗?,sockets,udp,Sockets,Udp,如果我在UDP套接字上发送一些字节序列(即,在单个send调用中),接收套接字是否可能只接收传输消息的一部分(忽略缓冲区过小的情况)。或者字节序列是全部传递还是完全不传递,但绝不是部分传递还是多组传递?UDP不保证来自机器A的负载将传递到机器B。在数据传输过程中,承载发送()调用负载的数据报可能会丢失。机器B将只向应用程序传递它到达那里的信息。部分原始有效载荷可能仍在飞行中(或丢失)。是。UDP数据报被完整地传递,或者根本不传递。UDP有o保证传递,但从客户端的角度来看,当收到数据报时,它保证是

如果我在UDP套接字上发送一些字节序列(即,在单个
send
调用中),接收套接字是否可能只接收传输消息的一部分(忽略缓冲区过小的情况)。或者字节序列是全部传递还是完全不传递,但绝不是部分传递还是多组传递?

UDP不保证来自机器A的负载将传递到机器B。在数据传输过程中,承载
发送()调用负载的数据报可能会丢失。机器B将只向应用程序传递它到达那里的信息。部分原始有效载荷可能仍在飞行中(或丢失)。

是。UDP数据报被完整地传递,或者根本不传递。

UDP有o保证传递,但从客户端的角度来看,当收到数据报时,它保证是完整的。机器B将传递整个数据报,或者什么也不传递-1@EJP-1,真的吗?我从来没有说过数据报可以部分交付。我说的是有效载荷,即
send()
缓冲区的内容。在这里,你的-1绝对不合适。同样,这是一个没有区别的区别。每个send()调用都会发送一个数据报。我认为问题不在于数据报本身,而在于
send()调用中发送的缓冲区的全部内容。至少我是这样理解的。@Asbkarf一个没有区别的区别。“在send()调用中发送的缓冲区的全部内容”是一个数据报。即使它比MTU大?如果它比MTU大,它可能根本不会被发送。它当然不会被分割成多个数据报,如果你是这样想的话。我明白了,这意味着它可能(也可能不是)被低层协议分割,但仍然是一个UDP数据报。现在明白了。