// Copyright 2014 The Android Open Source Project
//
// This software is licensed under the terms of the GNU General Public
// License version 2, as published by the Free Software Foundation, and
// may be copied, distributed, and modified under those terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

#pragma once

#include "android/base/Compiler.h"
#include "android/base/sockets/SocketUtils.h"

namespace android {
namespace base {

class ScopedSocket {
public:
    ScopedSocket() : mSocket(-1) {}

    ScopedSocket(int socket) : mSocket(socket) {}

    ~ScopedSocket() {
        close();
    }

    bool valid() const { return mSocket >= 0; }

    int get() const { return mSocket; }

    void close() {
        if (mSocket >= 0) {
            socketClose(mSocket);
            mSocket = -1;
        }
    }

    int release() {
        int result = mSocket;
        mSocket = -1;
        return result;
    }

    void reset(int socket) {
        int oldSocket = mSocket;
        mSocket = socket;
        if (oldSocket >= 0) {
            socketClose(oldSocket);
        }
    }

    void swap(ScopedSocket* other) {
        int tmp = mSocket;
        mSocket = other->mSocket;
        other->mSocket = tmp;
    }

private:
    int mSocket;
};

}  // namespace base
}  // namespace android
