summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/wifi-display
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2013-05-16 14:02:50 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-05-16 14:02:50 -0700
commitb5b2d03fc2c154a613ba68b599cd474b3e6ccec3 (patch)
treec348fc97b3e0ef162edf813436789f0f52d08379 /media/libstagefright/wifi-display
parenta7f316e84a1be6c8c23ef0c37a3dc07495266ed4 (diff)
parent99f27cdf2c2711aa0c8b4d9ae4d12cae37ff94f6 (diff)
downloadframeworks_av-b5b2d03fc2c154a613ba68b599cd474b3e6ccec3.zip
frameworks_av-b5b2d03fc2c154a613ba68b599cd474b3e6ccec3.tar.gz
frameworks_av-b5b2d03fc2c154a613ba68b599cd474b3e6ccec3.tar.bz2
am 99f27cdf: wifi-display: retry UDP read/write to improve connection robustness
* commit '99f27cdf2c2711aa0c8b4d9ae4d12cae37ff94f6': wifi-display: retry UDP read/write to improve connection robustness
Diffstat (limited to 'media/libstagefright/wifi-display')
-rw-r--r--media/libstagefright/wifi-display/ANetworkSession.cpp29
1 files changed, 25 insertions, 4 deletions
diff --git a/media/libstagefright/wifi-display/ANetworkSession.cpp b/media/libstagefright/wifi-display/ANetworkSession.cpp
index f074438..938d601 100644
--- a/media/libstagefright/wifi-display/ANetworkSession.cpp
+++ b/media/libstagefright/wifi-display/ANetworkSession.cpp
@@ -39,6 +39,7 @@
namespace android {
static const size_t kMaxUDPSize = 1500;
+static const int32_t kMaxUDPRetries = 200;
struct ANetworkSession::NetworkThread : public Thread {
NetworkThread(ANetworkSession *session);
@@ -105,6 +106,7 @@ private:
int mSocket;
sp<AMessage> mNotify;
bool mSawReceiveFailure, mSawSendFailure;
+ int32_t mUDPRetries;
List<Fragment> mOutFragments;
@@ -148,6 +150,7 @@ ANetworkSession::Session::Session(
mNotify(notify),
mSawReceiveFailure(false),
mSawSendFailure(false),
+ mUDPRetries(kMaxUDPRetries),
mLastStallReportUs(-1ll) {
if (mState == CONNECTED) {
struct sockaddr_in localAddr;
@@ -286,8 +289,17 @@ status_t ANetworkSession::Session::readMore() {
}
if (err != OK) {
- notifyError(false /* send */, err, "Recvfrom failed.");
- mSawReceiveFailure = true;
+ if (!mUDPRetries) {
+ notifyError(false /* send */, err, "Recvfrom failed.");
+ mSawReceiveFailure = true;
+ } else {
+ mUDPRetries--;
+ ALOGE("Recvfrom failed, %d/%d retries left",
+ mUDPRetries, kMaxUDPRetries);
+ err = OK;
+ }
+ } else {
+ mUDPRetries = kMaxUDPRetries;
}
return err;
@@ -479,8 +491,17 @@ status_t ANetworkSession::Session::writeMore() {
}
if (err != OK) {
- notifyError(true /* send */, err, "Send datagram failed.");
- mSawSendFailure = true;
+ if (!mUDPRetries) {
+ notifyError(true /* send */, err, "Send datagram failed.");
+ mSawSendFailure = true;
+ } else {
+ mUDPRetries--;
+ ALOGE("Send datagram failed, %d/%d retries left",
+ mUDPRetries, kMaxUDPRetries);
+ err = OK;
+ }
+ } else {
+ mUDPRetries = kMaxUDPRetries;
}
return err;