summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/wifi-display
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2013-05-16 14:05:19 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-05-16 14:05:19 -0700
commitd392f215e15b4737e9e1232b4eeba757303ced26 (patch)
tree9838d6a9a2ca0389bb195e197020529c4179ed02 /media/libstagefright/wifi-display
parent3135ab60c5d3604869dad217d73cf02f5c2ba3df (diff)
parentb5b2d03fc2c154a613ba68b599cd474b3e6ccec3 (diff)
downloadframeworks_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.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;