event/SocketMonitor: add method Steal()

This commit is contained in:
Max Kellermann 2013-01-27 22:37:01 +01:00
parent 6bf6c9215b
commit 068f191c0d
2 changed files with 17 additions and 3 deletions

View File

@ -105,17 +105,25 @@ SocketMonitor::Open(int _fd)
g_source_add_poll(&source->base, &poll); g_source_add_poll(&source->base, &poll);
} }
void int
SocketMonitor::Close() SocketMonitor::Steal()
{ {
assert(IsDefined()); assert(IsDefined());
Cancel(); Cancel();
close_socket(fd); int result = fd;
fd = -1; fd = -1;
g_source_destroy(&source->base); g_source_destroy(&source->base);
g_source_unref(&source->base); g_source_unref(&source->base);
source = nullptr; source = nullptr;
return result;
}
void
SocketMonitor::Close()
{
close_socket(Steal());
} }

View File

@ -73,6 +73,12 @@ public:
void Open(int _fd); void Open(int _fd);
/**
* "Steal" the socket descriptor. This abandons the socket
* and puts the responsibility for closing it to the caller.
*/
int Steal();
void Close(); void Close();
void Schedule(unsigned flags) { void Schedule(unsigned flags) {