ドメインソケットを使用してsendmsg
とrecvmsg
を使用して2つのプロセス間でファイル記述子を渡すプログラムを作成しています。ファイル記述子を送信するために、追加データはmsghdr.msg_iov
とmsghdr.msg_iolen
に含まれています。しかし、私は、通常のread
とwrite
システムコールと同様に、sendmsg
とrecvmsg
も部分的な読み取り/書き込みの問題があることを知っていました。この場合、補助データのデータは部分データごとに自動的に複製されますか?実装にはノンブロッキングメカニズムが必要なので、私はこれを求めています。私はもう少しsendmsg/recvmsgの部分的な読み取り/書き込みの問題
送信者を、それを詳しく説明するために、次の例を使ってみましょう:(1)部分的な読み取り、K1
バイト(2):補助的なフィールドでfd
が含まmsghdr
データとmsg_iov
レシーバでK
バイトを送信K-K1
バイト
上記の例のように、実際にすべてのデータが到着した段階(2)の後にデータを処理する必要があります。この場合、補助フィールドからfd
を正しく抽出できますか?それとも、最初の部分的な読み込みにのみ表示されますか?
'sendmsg()'が返す値を示すバイト数だけ送信し、 'recvmsg()'が返す値を示すバイト数だけ受信します。どちらの場合も、完全な送受信を確実にするためにループする必要があります。 – EJP
私はこれを知っています。私は実際に補助的なデータを求めています。この部分読み取り/書き込みの場合はどうなりますか – Jes
2つの異なるプロセス間でファイル記述子を送信できません。ファイルディスクリプタは、ポインタと同様に、プロセスにとってローカルです。 –