diff options
author | Chong Zhang <chz@google.com> | 2013-05-16 14:02:50 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-05-16 14:02:50 -0700 |
commit | b5b2d03fc2c154a613ba68b599cd474b3e6ccec3 (patch) | |
tree | c348fc97b3e0ef162edf813436789f0f52d08379 | |
parent | a7f316e84a1be6c8c23ef0c37a3dc07495266ed4 (diff) | |
parent | 99f27cdf2c2711aa0c8b4d9ae4d12cae37ff94f6 (diff) | |
download | frameworks_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
-rw-r--r-- | media/libstagefright/wifi-display/ANetworkSession.cpp | 29 |
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; |