1

Unix ソケットを介して接続されるクライアント サーバー モデルを作成する必要があります。私のクライアントは、サーバーのみがアクセス許可を持つファイルを開くようにサーバーに要求します。サーバーはファイルを開き、「sendmsg」API を使用して FD を送信し、クライアントは「recvmsg」を使用して FD を受信します。今私の質問は、ノンブロッキングソケットを使用してこれを達成できるかということです? また、可能であれば、クライアント側でメッセージの長さを知るにはどうすればよいですか?

同じものの非ブロッキング実装を教えてください。

4

2 に答える 2

0

関連: http://lists.canonical.org/pipermail/kragen-hacks/2002-January/000292.htmlしたがって、私の答えは完全ではありませんでした。

于 2012-06-21T06:29:14.410 に答える
0

sendfileを使用して、FD とソケットの間でファイルを送信する必要があります。

ソケットが非ブロッキングの場合、sendfile (または send または sendmsg) 呼び出しは、部分的な量が完了したことを示す値を返す可能性があります。select() または poll() を使用して、再送信が可能になったときに通知を受け取ります (前の送信が中断されたときに、ファイル記述子の前のポイントからピックアップします)。

ファイルの長さについては、リクエスト/レスポンス プロトコルに自分で追加する必要があります。(たとえば、サーバーで stat() を呼び出し、ファイルの長さを送信してから、ファイル自体を送信します)。

于 2012-06-23T04:43:31.600 に答える