VT: Change socket option to REUSEADDR
The last commit to open sockets for RTP is not reliable.
Recorder(Tx)/Player(Rx) opened same port for itself by using SO_REUSEPORT option.
This makes socket ambiguity problem so sometimes received packets flow in Recorder(Tx).
So changed socket option to SO_REUSEADDR and made socket different to solve ambiguity.
Tx sockets are opened for every foreign addresses.
Rx sockets are opened for just callee's addr:port by using connect().
The belows are result of netstat of UE when a call is established to itself.
+-----------------------------------------------------------------------------------+
|C:\> adb shell netstat -ul |
|Active Internet connections (only servers) |
| Proto Recv-Q Send-Q Local Address Foreign Address State |
| udp 327684 0 102.110.231.15:26300 0.0.0.0:* |
| udp 0 0 102.110.231.15:26301 0.0.0.0:* |
+-----------------------------------------------------------------------------------+
BEFORE
+-----------------------------------------------------------------------------------+
|C:\> adb shell netstat -ul |
|Active Internet connections (only servers) |
| Proto Recv-Q Send-Q Local Address Foreign Address State |
| udp 0 0 102.110.231.15:26300 102.110.231.15:26301 ESTABLISHED|
| udp 0 0 102.110.231.15:26301 102.110.231.15:26301 ESTABLISHED|
| udp 0 0 102.110.231.15:26300 0.0.0.0:* |
| udp 0 0 102.110.231.15:26301 0.0.0.0:* |
+-----------------------------------------------------------------------------------+
AFTER
Merged-in: I6d2d50139743c38cd4280120e20511153b2daad3
Change-Id: I6d2d50139743c38cd4280120e20511153b2daad3
Signed-off-by: Kim Sungyeon <sy85.kim@samsung.com>
diff --git a/media/libstagefright/rtsp/ARTPConnection.cpp b/media/libstagefright/rtsp/ARTPConnection.cpp
index 01ce43b..1af9ac8 100644
--- a/media/libstagefright/rtsp/ARTPConnection.cpp
+++ b/media/libstagefright/rtsp/ARTPConnection.cpp
@@ -192,8 +192,8 @@
}
int sockopt = 1;
- setsockopt(*rtpSocket, SOL_SOCKET, SO_REUSEPORT, (int *)&sockopt, sizeof(sockopt));
- setsockopt(*rtcpSocket, SOL_SOCKET, SO_REUSEPORT, (int *)&sockopt, sizeof(sockopt));
+ setsockopt(*rtpSocket, SOL_SOCKET, SO_REUSEADDR, (int *)&sockopt, sizeof(sockopt));
+ setsockopt(*rtcpSocket, SOL_SOCKET, SO_REUSEADDR, (int *)&sockopt, sizeof(sockopt));
int sizeSockSt = isIPv6 ? sizeof(addr6) : sizeof(addr4);
diff --git a/media/libstagefright/rtsp/ARTPWriter.cpp b/media/libstagefright/rtsp/ARTPWriter.cpp
index 5a12b2b..9111560 100644
--- a/media/libstagefright/rtsp/ARTPWriter.cpp
+++ b/media/libstagefright/rtsp/ARTPWriter.cpp
@@ -1164,8 +1164,8 @@
CHECK_GE(mRTCPSocket, 0);
int sockopt = 1;
- setsockopt(mRTPSocket, SOL_SOCKET, SO_REUSEPORT, (int *)&sockopt, sizeof(sockopt));
- setsockopt(mRTCPSocket, SOL_SOCKET, SO_REUSEPORT, (int *)&sockopt, sizeof(sockopt));
+ setsockopt(mRTPSocket, SOL_SOCKET, SO_REUSEADDR, (int *)&sockopt, sizeof(sockopt));
+ setsockopt(mRTCPSocket, SOL_SOCKET, SO_REUSEADDR, (int *)&sockopt, sizeof(sockopt));
if (mIsIPv6) {
memset(&mLocalAddr6, 0, sizeof(mLocalAddr6));
@@ -1207,7 +1207,7 @@
if (bind(mRTPSocket, localAddr, sizeSockSt) == -1) {
ALOGE("failed to bind rtp %s:%d err=%s", localIp.string(), localPort, strerror(errno));
} else {
- ALOGI("succeed to bind rtp %s:%d", localIp.string(), localPort);
+ ALOGD("succeed to bind rtp %s:%d", localIp.string(), localPort);
}
if (mIsIPv6)
@@ -1218,13 +1218,8 @@
if (bind(mRTCPSocket, localAddr, sizeSockSt) == -1) {
ALOGE("failed to bind rtcp %s:%d err=%s", localIp.string(), localPort + 1, strerror(errno));
} else {
- ALOGI("succeed to bind rtcp %s:%d", localIp.string(), localPort + 1);
+ ALOGD("succeed to bind rtcp %s:%d", localIp.string(), localPort + 1);
}
-
- if (mIsIPv6)
- mLocalAddr6.sin6_port = htons((uint16_t)localPort);
- else
- mLocalAddr.sin_port = htons((uint16_t)localPort);
}
} // namespace android