digitalmars.D - epoll,kqueue support
- darkofpain (5/5) Oct 04 2013 Hi Friends,
- Adam D. Ruppe (52/52) Oct 04 2013 You can call the functions with extern(C).
- S (3/7) Oct 04 2013 +1 on this. Use libev, or libevent2. There are bindings around for
- darkofpain (5/57) Oct 05 2013 Thank You,
- Dejan Lekic (4/12) Oct 05 2013 As you probably know, epoll is in core.sys.linux.epoll.d . kqueue
Hi Friends, D language epoll(linux/unix), kqueue(mac/freebsd) is there support for API How can I use supports Thank You
Oct 04 2013
You can call the functions with extern(C).
There's also bindings to libraries that handle both, but I've
never used them:
http://code.dlang.org/packages/libev
Here's how to do epoll without a library:
// calling epoll directly
version(linux) {
extern(C):
alias int c_int;
alias uint uint32_t;
alias ulong uint64_t;
union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
}
struct epoll_event {
uint32_t events; /* Epoll events */
epoll_data data; /* User data variable */
}
enum EPOLL_CTL_ADD = 1;
enum EPOLL_CTL_DEL = 2;
enum EPOLL_CTL_MOD = 3;
import std.conv : octal;
enum {
EPOLL_CLOEXEC = octal!"2000000",
EPOLL_NONBLOCK = octal!"4000"
}
enum EPOLL_EVENTS {
EPOLLIN = 0x001,
EPOLLPRI = 0x002,
EPOLLOUT = 0x004,
EPOLLRDNORM = 0x040,
EPOLLRDBAND = 0x080,
EPOLLWRNORM = 0x100,
EPOLLWRBAND = 0x200,
EPOLLMSG = 0x400,
EPOLLERR = 0x008,
EPOLLHUP = 0x010,
EPOLLRDHUP = 0x2000,
EPOLLONESHOT = (1 << 30),
EPOLLET = (1 << 31)
}
int epoll_create1(int flags);
int epoll_ctl(int epfd, int op, int fd, epoll_event* event);
int epoll_wait(int epfd, epoll_event* events, int maxevents, int
timeout);
import core.sys.posix.sys.time;
}
Then you use epoll_create(), etc., just like you would in C.
kqueue would be similar, though I've never done that in D.
Oct 04 2013
On 2013-10-04 14:30:39 +0000, Adam D. Ruppe said:You can call the functions with extern(C). There's also bindings to libraries that handle both, but I've never used them: http://code.dlang.org/packages/libev+1 on this. Use libev, or libevent2. There are bindings around for them. (I know vibe-d is using them)
Oct 04 2013
On Friday, 4 October 2013 at 14:30:40 UTC, Adam D. Ruppe wrote:
You can call the functions with extern(C).
There's also bindings to libraries that handle both, but I've
never used them:
http://code.dlang.org/packages/libev
Here's how to do epoll without a library:
// calling epoll directly
version(linux) {
extern(C):
alias int c_int;
alias uint uint32_t;
alias ulong uint64_t;
union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
}
struct epoll_event {
uint32_t events; /* Epoll events */
epoll_data data; /* User data variable */
}
enum EPOLL_CTL_ADD = 1;
enum EPOLL_CTL_DEL = 2;
enum EPOLL_CTL_MOD = 3;
import std.conv : octal;
enum {
EPOLL_CLOEXEC = octal!"2000000",
EPOLL_NONBLOCK = octal!"4000"
}
enum EPOLL_EVENTS {
EPOLLIN = 0x001,
EPOLLPRI = 0x002,
EPOLLOUT = 0x004,
EPOLLRDNORM = 0x040,
EPOLLRDBAND = 0x080,
EPOLLWRNORM = 0x100,
EPOLLWRBAND = 0x200,
EPOLLMSG = 0x400,
EPOLLERR = 0x008,
EPOLLHUP = 0x010,
EPOLLRDHUP = 0x2000,
EPOLLONESHOT = (1 << 30),
EPOLLET = (1 << 31)
}
int epoll_create1(int flags);
int epoll_ctl(int epfd, int op, int fd, epoll_event* event);
int epoll_wait(int epfd, epoll_event* events, int maxevents,
int timeout);
import core.sys.posix.sys.time;
}
Then you use epoll_create(), etc., just like you would in C.
kqueue would be similar, though I've never done that in D.
Thank You,
Epoll ok.
I need information about the room kqueue important to me, but do
not have the source for the D language
Oct 05 2013
On Fri, 04 Oct 2013 10:44:31 +0200, darkofpain wrote:Hi Friends, D language epoll(linux/unix), kqueue(mac/freebsd) is there support for API How can I use supports Thank YouAs you probably know, epoll is in core.sys.linux.epoll.d . kqueue obviously need someone to write it and submit a pull request. D can call any C function, so using kqueue should not be a big deal...
Oct 05 2013









S <S S.com> 