これが私の最初のメッセージです。リアルタイムOS(OnTimeおよびVxWorks)でノンブロッキングUDPソケットを使用しています。ドキュメントといくつかのフォーラムを読みましたが、sendto()関数とrecvfrom()関数の「原子性」について疑問があります。
sendto()は、キューに入れられたバイト数またはエラーを返します。入力バッファの長さより短い可能性はありますか?たぶん、出力バッファに十分な空き領域がなく、ほんの数バイトがエンキューされています...
recvfrom()は、受信したバイト数またはエラーを返します。ソースが送信したメッセージのサイズよりも小さい可能性はありますか?私は部分的なメッセージの読み取りを意味します...
読み取りおよび書き込み関数がアトミック(完全なメッセージまたはメッセージの読み取り/書き込みなし)であることを願っています。
ありがとう。エマヌエーレ。
OnTimeのサポートを依頼したところ、出力バッファに十分な空き領域がない場合、sendto()が部分的なメッセージをキューに入れる可能性があると言われました。場合によっては、recvfrom()も部分的なメッセージを返すことができるかどうかはわかりません。異なるOS間でのソケット実装には標準的な動作はないと思います。