5

ソケットをリッスンし、クライアントが接続するのを待ってから、接続が確立されるとすぐに起動する別のアプリケーションに接続を渡すシステムがあります。

私はこの他のアプリケーションを制御できず、リッスンするポートのみを設定できますが、新しいクライアントごとに1つのプロセスが必要です。

これが私がやろうとしていることです:

ルーティング

私は解決策を探していましたが、正しい用語がないのですが、Richard Stevensの「UnixNetworkProgramming」AF_ROUTEで、ソケットのファミリーについて何かを見つけることができましSOCK_RAWた。別のIPとポートへの接続。しかし、このフラグの使用方法に関するドキュメントが少なすぎて、スーパーユーザー特権が必要なようです(私は避けたいと思います)。

もっと簡単な解決策があるかもしれませんが、私はおそらく間違った用語を使用しています。私が何をしたいのか明確ですか?

4

1 に答える 1

0

特に「APP」を変更して再コンパイルできない場合は、ソケットを希望どおりに「渡す」ことはできないと思います。ソケットには、所有するプロセスにリンクされているさまざまな管理オーバーヘッド(リソース管理など)が含まれます。さらに、APPを再コンパイルできない場合は、接続の受け入れに関連する手順をバイパスする方法はなく、ルーターからすでに開いている接続が「渡され」ます。

ただし、単にルーターをパススルーとして使用することを検討しましたか?基本的に、「ルーター」プロセスは、ソケットを介して、生成する各「APP」プロセスに接続し、適切なクライアントから適切なAPPに受信したものをエコーし​​、APPからクライアントにその逆を行いますか?

これによりオーバーヘッドが追加され、どのクライアントがどのアプリにアクセスするかを追跡するために小さなマッピングを管理する必要がありますが、機能する可能性があります(APPまたはクライアントが接続先のIPアドレスに基づいて動作を行わない場合) 、など)。APPを再コンパイルできないと仮定すると、他のオプションはそれほど多くない可能性があります。

このためのコードは比較的単純です。APPから受信したデータのハンドラーは、マッピングから適切なアプリのソケットを検索し、このデータをノンブロッキングで送信します。同様に、クライアントから受信したデータのハンドラー。クライアントとアプリの動作の正確さによっては、少しの同期を処理する必要がある場合があります(両方から同時に受信する場合)。

于 2012-10-22T20:31:40.187 に答える