Commit 95bb1288 authored by Max Kellermann's avatar Max Kellermann Committed by Max Kellermann

net/UniqueSocketDescriptor: add `noexcept`

parent 25719666
...@@ -42,19 +42,20 @@ class StaticSocketAddress; ...@@ -42,19 +42,20 @@ class StaticSocketAddress;
*/ */
class UniqueSocketDescriptor : public SocketDescriptor { class UniqueSocketDescriptor : public SocketDescriptor {
public: public:
UniqueSocketDescriptor() UniqueSocketDescriptor() noexcept
:SocketDescriptor(SocketDescriptor::Undefined()) {} :SocketDescriptor(SocketDescriptor::Undefined()) {}
explicit UniqueSocketDescriptor(SocketDescriptor _fd) explicit UniqueSocketDescriptor(SocketDescriptor _fd) noexcept
:SocketDescriptor(_fd) {} :SocketDescriptor(_fd) {}
explicit UniqueSocketDescriptor(FileDescriptor _fd) explicit UniqueSocketDescriptor(FileDescriptor _fd) noexcept
:SocketDescriptor(_fd) {}
explicit UniqueSocketDescriptor(int _fd) noexcept
:SocketDescriptor(_fd) {} :SocketDescriptor(_fd) {}
explicit UniqueSocketDescriptor(int _fd):SocketDescriptor(_fd) {}
UniqueSocketDescriptor(UniqueSocketDescriptor &&other) UniqueSocketDescriptor(UniqueSocketDescriptor &&other) noexcept
:SocketDescriptor(std::exchange(other.fd, -1)) {} :SocketDescriptor(std::exchange(other.fd, -1)) {}
~UniqueSocketDescriptor() { ~UniqueSocketDescriptor() noexcept {
if (IsDefined()) if (IsDefined())
Close(); Close();
} }
...@@ -63,38 +64,38 @@ public: ...@@ -63,38 +64,38 @@ public:
* Release ownership and return the descriptor as an unmanaged * Release ownership and return the descriptor as an unmanaged
* #SocketDescriptor instance. * #SocketDescriptor instance.
*/ */
SocketDescriptor Release() { SocketDescriptor Release() noexcept {
return std::exchange(*(SocketDescriptor *)this, Undefined()); return std::exchange(*(SocketDescriptor *)this, Undefined());
} }
UniqueSocketDescriptor &operator=(UniqueSocketDescriptor &&src) { UniqueSocketDescriptor &operator=(UniqueSocketDescriptor &&src) noexcept {
using std::swap; using std::swap;
swap(fd, src.fd); swap(fd, src.fd);
return *this; return *this;
} }
bool operator==(const UniqueSocketDescriptor &other) const { bool operator==(const UniqueSocketDescriptor &other) const noexcept {
return fd == other.fd; return fd == other.fd;
} }
/** /**
* @return an "undefined" instance on error * @return an "undefined" instance on error
*/ */
UniqueSocketDescriptor AcceptNonBlock() const { UniqueSocketDescriptor AcceptNonBlock() const noexcept {
return UniqueSocketDescriptor(SocketDescriptor::AcceptNonBlock()); return UniqueSocketDescriptor(SocketDescriptor::AcceptNonBlock());
} }
/** /**
* @return an "undefined" instance on error * @return an "undefined" instance on error
*/ */
UniqueSocketDescriptor AcceptNonBlock(StaticSocketAddress &address) const { UniqueSocketDescriptor AcceptNonBlock(StaticSocketAddress &address) const noexcept {
return UniqueSocketDescriptor(SocketDescriptor::AcceptNonBlock(address)); return UniqueSocketDescriptor(SocketDescriptor::AcceptNonBlock(address));
} }
#ifndef _WIN32 #ifndef _WIN32
static bool CreateSocketPair(int domain, int type, int protocol, static bool CreateSocketPair(int domain, int type, int protocol,
UniqueSocketDescriptor &a, UniqueSocketDescriptor &a,
UniqueSocketDescriptor &b) { UniqueSocketDescriptor &b) noexcept {
return SocketDescriptor::CreateSocketPair(domain, type, return SocketDescriptor::CreateSocketPair(domain, type,
protocol, protocol,
a, b); a, b);
...@@ -102,7 +103,7 @@ public: ...@@ -102,7 +103,7 @@ public:
static bool CreateSocketPairNonBlock(int domain, int type, int protocol, static bool CreateSocketPairNonBlock(int domain, int type, int protocol,
UniqueSocketDescriptor &a, UniqueSocketDescriptor &a,
UniqueSocketDescriptor &b) { UniqueSocketDescriptor &b) noexcept {
return SocketDescriptor::CreateSocketPairNonBlock(domain, type, return SocketDescriptor::CreateSocketPairNonBlock(domain, type,
protocol, protocol,
a, b); a, b);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment