On Mon, 30 Dec 2013 16:50:20 GMT, Johannes Pfau wrote:

On Mon, 30 Dec 2013 17:04:01 +0100, Sönke Ludwig wrote:

There is one issue that may prevent TCPConnection from being used for
this in a "sane" way. In the libevent driver it uses bufferevent,
which has an internal prefetch buffer, so it would steal the incoming
data. But it should be possible to manually adopt a socket into the
libevent loop using a manually created event without problems. That
would then just need to be encapsulated cleanly somehow. Maybe like this:

interface SocketEventListener {
	enum Event {
		read = 1<<0,
		write = 1<<1,
		status = 1<<2,
		any = read|write|status
	}
	
	void wait(Event which = Event.any);
}

SocketEventListener createSocketEventListener(int socket);

Any idea for a better name or anything that would be missing?

Sounds good.
Timeout support would probably be good. Although I think this could be implemented outside of SocketEventListener it's probably easier to add support in SocketEventListener.

Implemented now as of daf853f. It's called vibe.core.core.createFileDescriptorEvent() and includes an optional timeout parameter. I'm also using it now to integrate the vibe.d event loop with the X11 event loop on Linux.