Add missing files ...
This commit is contained in:
parent
f12e655cf8
commit
2b203c4616
82
ixwebsocket/IXEventFd.cpp
Normal file
82
ixwebsocket/IXEventFd.cpp
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* IXEventFd.cpp
|
||||
* Author: Benjamin Sergeant
|
||||
* Copyright (c) 2018 Machine Zone, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
//
|
||||
// Linux/Android has a special type of virtual files. select(2) will react
|
||||
// when reading/writing to those files, unlike closing sockets.
|
||||
//
|
||||
// https://linux.die.net/man/2/eventfd
|
||||
// http://www.sourcexr.com/articles/2013/10/26/lightweight-inter-process-signaling-with-eventfd
|
||||
//
|
||||
// eventfd was added in Linux kernel 2.x, and our oldest Android (Kitkat 4.4)
|
||||
// is on Kernel 3.x
|
||||
//
|
||||
// cf Android/Kernel table here
|
||||
// https://android.stackexchange.com/questions/51651/which-android-runs-which-linux-kernel
|
||||
//
|
||||
|
||||
#include "IXEventFd.h"
|
||||
|
||||
#ifdef __linux__
|
||||
# include <sys/eventfd.h>
|
||||
#endif
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <unistd.h> // for write
|
||||
#endif
|
||||
|
||||
namespace ix
|
||||
{
|
||||
EventFd::EventFd() :
|
||||
_eventfd(-1)
|
||||
{
|
||||
#ifdef __linux__
|
||||
_eventfd = eventfd(0, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
EventFd::~EventFd()
|
||||
{
|
||||
#ifdef __linux__
|
||||
::close(_eventfd);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool EventFd::notify()
|
||||
{
|
||||
#if defined(__linux__)
|
||||
if (_eventfd == -1) return false;
|
||||
|
||||
// select will wake up when a non-zero value is written to our eventfd
|
||||
uint64_t value = 1;
|
||||
|
||||
// we should write 8 bytes for an uint64_t
|
||||
return write(_eventfd, &value, sizeof(value)) == 8;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool EventFd::clear()
|
||||
{
|
||||
#if defined(__linux__)
|
||||
if (_eventfd == -1) return false;
|
||||
|
||||
// 0 is a special value ; select will not wake up
|
||||
uint64_t value = 0;
|
||||
|
||||
// we should write 8 bytes for an uint64_t
|
||||
return write(_eventfd, &value, sizeof(value)) == 8;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
int EventFd::getFd()
|
||||
{
|
||||
return _eventfd;
|
||||
}
|
||||
}
|
23
ixwebsocket/IXEventFd.h
Normal file
23
ixwebsocket/IXEventFd.h
Normal file
@ -0,0 +1,23 @@
|
||||
/*
|
||||
* IXEventFd.h
|
||||
* Author: Benjamin Sergeant
|
||||
* Copyright (c) 2018 Machine Zone, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace ix
|
||||
{
|
||||
class EventFd {
|
||||
public:
|
||||
EventFd();
|
||||
virtual ~EventFd();
|
||||
|
||||
bool notify();
|
||||
bool clear();
|
||||
int getFd();
|
||||
|
||||
private:
|
||||
int _eventfd;
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user