| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
October 04, 2013 epoll,kqueue support | ||||
|---|---|---|---|---|
| ||||
Hi Friends, D language epoll(linux/unix), kqueue(mac/freebsd) is there support for API How can I use supports Thank You | ||||
October 04, 2013 Re: epoll,kqueue support | ||||
|---|---|---|---|---|
| ||||
Posted in reply to darkofpain | 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. | |||
October 04, 2013 Re: epoll,kqueue support | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | 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)
| |||
October 05, 2013 Re: epoll,kqueue support | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Adam D. Ruppe | 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
| |||
October 05, 2013 Re: epoll,kqueue support | ||||
|---|---|---|---|---|
| ||||
Posted in reply to darkofpain | 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 You
As 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...
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply