From 99f27cdf2c2711aa0c8b4d9ae4d12cae37ff94f6 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Wed, 15 May 2013 18:47:26 -0700 Subject: wifi-display: retry UDP read/write to improve connection robustness Bug: 8922753 Change-Id: Ie6d18f03afcb23d11e6f0e63403e8f0d59b70be8 --- .../wifi-display/ANetworkSession.cpp | 29 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'media/libstagefright/wifi-display') 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 mNotify; bool mSawReceiveFailure, mSawSendFailure; + int32_t mUDPRetries; List 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; -- cgit v1.1