event/SocketMonitor: add method Steal()
This commit is contained in:
parent
6bf6c9215b
commit
068f191c0d
@ -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());
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user