ポート(5678など)でRTP(UDP)パケットを受信し、同じポート(5678)からRTPパケットを送信する必要があるAndroidでRTPストリーミングコードに取り組んでいます。送信側コードと受信側コードは別の場所にあるため、1 つのソケットを送信と受信の両方に使用することはできません。
これを実現するには、 bind()を使用して送信側ソケットと受信側ソケットを同じポートにバインドする必要があります。2 つのソケットで bind() だけを使用すると、2 番目の bind() でエラーが発生します。(予想通り)
StackOverflow の他の投稿を検索した後、ソケット オプションSO_REUSEADDR ( Linux ではSO_REUSEPORTは使用できません) を使用するオプションを見つけました。
SO_REUSEADDRを使用すると、2 つのソケットを同じポートに bind() できます。送信側ソケットは、このポートから sendto() を実行できます。しかし、受信側ソケットは、読み取り可能な着信パケットの表示を停止します ( select() + FD_ISSET()リッスン メソッド)。別のポートに bind() された場合、受信側ソケットは別のポートで着信パケットを正常に受信します。
つまり、1 つのソケットのみが共有ポートを使用でき、他のソケットはパケットを奪われます。
SO_REUSEADDR アプローチまたはその他のアプローチの改善に関する提案は、高く評価されます。