diff --git a/network_bsd.cpp b/network_bsd.cpp index 01f03ca..64c1cd1 100644 --- a/network_bsd.cpp +++ b/network_bsd.cpp @@ -286,6 +286,12 @@ void BaseSocketBsd::AddToEndLoop() { network_->endloop_[endloop_slot_ = network_->num_endloop_++] = this; } +int BaseSocketBsd::StealFd() { + int fd = exch(fd_, -1); + CloseSocket(); + return fd; +} + ////////////////////////////////////////////////////////////////////////////////////////////// TunSocketBsd::TunSocketBsd(NetworkBsd *network, WireguardProcessor *processor) diff --git a/network_bsd.h b/network_bsd.h index 6f2c711..04a023b 100644 --- a/network_bsd.h +++ b/network_bsd.h @@ -101,6 +101,7 @@ public: void AddToEndLoop(); int GetFd() { return fd_; } + int StealFd(); protected: void SetPollFlags(int events) {