0

2 つのソケット (1 つの TCP と 1 つの UDP) をバインドし、両方が同じ一時ポートを持つことを保証する単純な (非反復的な) 方法はありますか?

最初はTCP経由で接続されている単純なサーバーがありますが、UDP経由でも送信されます。サーバーがクライアントのUDPエフェメラルポートを検出するためだけに、クライアントから接続後にUDPパケットを送信したくありません。必要がない限り、最初の TCP 接続メッセージを介してポート番号を送信したくありません。

現在、TCP ソケットの getsockname の後にクライアント UDP ソケットのポートを明示的にバインドして、OS が割り当てた一時ポートを検出します。まだ壊れていませんが、もろい感じです。

編集: 明確にするために、現在の実装では、オペレーティング システムが UDP ソケットによって既に使用されている TCP ソケットに一時的なポートを割り当てないことを前提としています。

4

1 に答える 1

0

1 つを (0) にバインドし、ローカル ポートの値を取得してから、もう 1 つをその値にバインドします。失敗した場合 (ポートが既に割り当てられている場合)、最初のソケットを閉じ、すすぎ、繰り返します。

「感じる」かもしれないほど壊れやすい、他に方法はありません。しかし、なぜそれらを同じにする必要があるのか​​ わかりません。それらが一時的なものである場合、とにかく他の誰もそれらが何であるかを知りません.何らかの方法でそれらを宣伝する必要があります.

于 2012-08-08T07:12:40.737 に答える