This is a simple wrapper of network library, D language implementation. Its encapsulation is simple and clear, and is very suitable for reading and reference. Though very small, its performance is pretty good, It's a real full duplex mode.
Platforms FreeBSD Windows OSX Linux NetBSD OpenBSD
Epoll Kqueue IOCP
// Echo server:
import std.stdio;
import std.conv;
import std.socket;
import std.exception;
import async;
void main()
{
TcpListener listener = new TcpListener();
listener.bind(new InternetAddress("0.0.0.0", 12290));
listener.listen(10);
EventLoop loop = new EventLoop(listener, null, null, &onReceive, null, null);
loop.run();
}
void onReceive(TcpClient client, in ubyte[] data) nothrow @trusted
{
collectException({
writefln("Receive from %s: %d", client.remoteAddress().toString(), data.length);
client.send(cast(ubyte[])data);
}());
}
// Echo client:
import std.stdio;
import std.conv;
import std.socket;
void main(string[] argv)
{
TcpSocket socket = new TcpSocket();
socket.blocking = true;
socket.connect(new InternetAddress("127.0.0.1", 12290));
string data = "hello, server.";
writeln("Client say: ", data);
socket.send(data);
ubyte[] buffer = new ubyte[1024];
size_t len = socket.receive(buffer);
writeln("Server reply: ", cast(string)buffer[0..len]);
socket.shutdown(SocketShutdown.BOTH);
socket.close();
}
You can add, repair and submit after fork, and improve it together. Thank you.
Note:
IOCP has not been completed and submitted.