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);
}
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());
}

View File

@ -73,6 +73,12 @@ public:
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 Schedule(unsigned flags) {