diff options
author | Chong Zhang <chz@google.com> | 2013-05-16 14:05:19 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-05-16 14:05:19 -0700 |
commit | d392f215e15b4737e9e1232b4eeba757303ced26 (patch) | |
tree | 9838d6a9a2ca0389bb195e197020529c4179ed02 /media/libstagefright/wifi-display | |
parent | 3135ab60c5d3604869dad217d73cf02f5c2ba3df (diff) | |
parent | b5b2d03fc2c154a613ba68b599cd474b3e6ccec3 (diff) | |
download | frameworks_av-d392f215e15b4737e9e1232b4eeba757303ced26.zip frameworks_av-d392f215e15b4737e9e1232b4eeba757303ced26.tar.gz frameworks_av-d392f215e15b4737e9e1232b4eeba757303ced26.tar.bz2 |
am b5b2d03f: am 99f27cdf: wifi-display: retry UDP read/write to improve connection robustness
* commit 'b5b2d03fc2c154a613ba68b599cd474b3e6ccec3':
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.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; |