Thread overview
epoll,kqueue support
Oct 04, 2013
darkofpain
Oct 04, 2013
Adam D. Ruppe
Oct 04, 2013
S
Oct 05, 2013
darkofpain
Oct 05, 2013
Dejan Lekic
October 04, 2013
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
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
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
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
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...