>>974
>>982 のレスで正しくて、だぶん蛇足だと思うけど解説しとく

まず、UDP を利用するアプリケーションから見た「論理メッセージ」と
送信側/受信側の対向する UDP 間で転送される「データグラム」を混同しやすいので注意が必要

で、UDP 上の論理メッセージに関して「途中でちょん切ったりくっつけたり」することはない
ただし UDP は「順番が入れ替わったり取りこぼしが出る」信頼性の無いプロトコルだから、
たとえば送信側アプリが "123" と "456" という論理メッセージの送信を UDP へ要求した場合、
受信側アプリでは以下に示す4通りのパターンのいずれかになることが保証されている
 1) 正常な転送    : "1234" "5678"
 2) 部分的な欠落(1): "1234"
 3) 部分的な欠落(2): "5678"
 4) すべて欠落    : (* 何も受信しない *)
ここで、UDP は論理メッセージ間に境界が存在するブロック指向プロトコルだから、(ストリーム指向の TCP とは異なり)
"12" "34" "56" "78" と「途中でちょん切ったり」することはないし、"12345678" と勝手に「くっつけたり」することもない

次に UDP 間で転送されるデータグラムについては、分割(fragment)と組み立て(reassemble)が起きることがある
つまり送信側 UDP で1個のデータグラムが複数の IP パケットへと分割されてから転送され、
受信側 UDP によって複数の IP パケットが1個の データグラムへと組立てられることがある
その結果として「(UDP はデータグラムを)途中でちょん切ったりくっつけたり」することがある、と言える
ただし、アプリケーションからデータグラムの分割/組み立ては見えないから、一般にソケットプログラマが意識する必要はない