Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99f27cdf authored by Chong Zhang's avatar Chong Zhang
Browse files

wifi-display: retry UDP read/write to improve connection robustness

Bug: 8922753
Change-Id: Ie6d18f03afcb23d11e6f0e63403e8f0d59b70be8
parent dd90e8b5
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -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) {
            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) {
            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;