2017-01-22 16 views
1

同じ実行可能イメージを共有しない異なるプロセス(つまり、fork()はありません)では、TCPを使用して、Windows、Linux、またはOSX上で同じクライアント側ポートを使用できますか?これは具体的にはソケットのオプションSO_REUSEADDRSO_REUSEPORTsetsockopt()を使用して設定されていると考えられます。TCP - 異なるクライアント側のポートを、異なるアプリケーション間で異なる接続に同時に使用することは可能ですか?

私が読んだ限り、同じプロセス/イメージでこれを行うことは可能ですが、複数のプロセス/イメージに関する情報は見つかりませんでした。各ソケットは5値タプル[IP_PROTO、src_ip:src_port、dst_ip:dst_port]で定義されているので、理論的には可能です。だから私は、クライアント側のポートを共有する複数のTCP接続が同じdst_ip:dst_portに作られていない限り、これは理論的に可能であると仮定します。

答えて

0

UDPは接続指向ではなく、クライアントとサーバーの間に実際の区別がないため、UDPの場合、この質問はあまり意味がありません。

TCPの場合、SO_REUSEADDRを使用すると、複数のクライアントを同じポートにバインドできますが、その理由は何ですか?通常は、接続を確立する前にクライアントのバインドを解除し、カーネルに未使用のポートを選択させます。

+0

私はしたくないですが、この動作が可能かどうかに依存するので、他のアプリケーションがこれを行うことができるかどうかを知る必要があります。 –

+0

これは実際には異なるアプリケーションで可能であることを理解していますか? –

+1

*可能ですか?同じポート上のすべてのソケットが 'SO_REUSEADDR' /' SO_REUSEPORT'を使用するなら、そうです。それはおそらく*でしょうか?いいえ。 –

関連する問題