2012-04-30 4 views
1

Unixドメインソケットファイル記述子をプロセスAから別のUnixドメインソケット接続を介してプロセスBに渡そうとしていますが、 tcpソケットは問題なく渡されます。 理由がありますか、何か間違っていますか? 両方ともアンリアルメッセージを通します。 ThanxcまたはC++で別のUDS接続を使用してUDSファイル記述子を渡すことはできますか

+0

あなたの観察された問題を示すコードを投稿してください。 –

+0

オープンされたUDS接続を表すfdを渡すための既知の制限があるかどうかを理解しようとしています。 – AC78

答えて

1

ソケットファイル記述子(通常のファイル記述子のように)は、正しく作成されたプロセスの外では全く意味を持ちません。 fdを他のプロセスに送信すると、バイトの束を送信しているだけです。これ以上のものはありません。

唯一の方法あなたは作業fdつのプロセスから別のfork()に渡されるfdを含むプロセスで移動することができます。

特定のプロセスを特定のUnixソケットに接続する場合は、そのプロセスにUNIXソケットファイルシステムエントリ名を渡す必要があります。受信プロセスは、ソケットを作成して後で接続することができます。

私はなぜtcpソケットfdを渡すことに問題がなかったのか分かりません。おそらく、コードの関連部分を投稿すると、その理由が明らかになります。

+1

'fork()'は、作業中のfdをあるプロセスから別のプロセスに移動する唯一の方法ではありません。 'SCM_RIGHTS' [付随メッセージ](http://linux.die.net/man/3/cmsg)はファイルディスクリプタをUNIXソケットを介して別のプロセスに送ることができます。 –

+0

@SamMiller良い点、私はそれを知らなかった。 –

+0

私はSCM_RIGHTS補助メッセージを使ってtcp接続を渡しましたが、UDSの接続を渡そうとすると失敗します。だから、それに理由があるか、何か間違っているのですか? – AC78

関連する問題