diff options
Diffstat (limited to 'src/event/SocketMonitor.cxx')
-rw-r--r-- | src/event/SocketMonitor.cxx | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/event/SocketMonitor.cxx b/src/event/SocketMonitor.cxx index b75dc72a4..57364c883 100644 --- a/src/event/SocketMonitor.cxx +++ b/src/event/SocketMonitor.cxx @@ -105,17 +105,25 @@ SocketMonitor::Open(int _fd) g_source_add_poll(&source->base, &poll); } -void -SocketMonitor::Close() +int +SocketMonitor::Steal() { assert(IsDefined()); Cancel(); - close_socket(fd); + int result = fd; fd = -1; g_source_destroy(&source->base); g_source_unref(&source->base); source = nullptr; + + return result; +} + +void +SocketMonitor::Close() +{ + close_socket(Steal()); } |