#pragma once #include struct Socket { int fd = -1; Socket() = default; explicit Socket(int fd) : fd(fd) {} ~Socket() { if (fd >= 0) close(fd); } Socket(const Socket&) = delete; Socket& operator=(const Socket&) = delete; Socket(Socket&& o) : fd(o.fd) { o.fd = -1; } operator int() const { return fd; } bool valid() const { return fd >= 0; } void release() { fd = -1; } };