besterd/source/listeners/types.d

106 lines
2.1 KiB
D
Raw Normal View History

2020-04-24 17:48:22 +02:00
module listeners.types;
2020-05-09 16:14:55 +02:00
import listeners.listener : BesterListener, BesterListenerException;
2020-05-09 15:53:25 +02:00
import server.server : BesterServer;
2020-05-09 16:14:55 +02:00
import std.socket : Socket, Address, AddressFamily, SocketType, SocketException;
2020-05-09 15:53:25 +02:00
/**
2020-05-09 15:54:42 +02:00
* Represents a stream socket listener over UNIX
2020-05-09 15:53:25 +02:00
* domain sockets.
*/
public final class UNIXListener : BesterListener
{
2020-04-20 19:39:30 +02:00
this(BesterServer besterServer, Address address)
{
super(besterServer);
2020-05-09 16:14:55 +02:00
try
{
setServerSocket(setupUNIXSocket(address));
}
catch(SocketException e)
{
throw new BesterListenerException(this);
}
}
2020-04-20 19:39:30 +02:00
private Socket setupUNIXSocket(Address address)
{
2020-04-20 19:39:30 +02:00
Socket unixSocket = new Socket(AddressFamily.UNIX, SocketType.STREAM);
unixSocket.bind(address);
return unixSocket;
}
override public string toString()
{
string address = "unix://"~super.address.toAddrString();
return address;
}
2020-04-20 18:51:40 +02:00
}
2020-05-09 15:53:25 +02:00
/**
* Represents a stream socket listener over TCP
* on IPv4.
*/
public final class TCP4Listener : BesterListener
2020-04-20 18:51:40 +02:00
{
2020-04-20 19:39:30 +02:00
this(BesterServer besterServer, Address address)
2020-04-20 18:51:40 +02:00
{
super(besterServer);
2020-05-09 16:14:55 +02:00
try
{
setServerSocket(setupTCP4Socket(address));
}
catch(SocketException e)
{
throw new BesterListenerException(this);
}
2020-04-20 18:51:40 +02:00
}
2020-04-20 19:39:30 +02:00
private Socket setupTCP4Socket(Address address)
2020-04-20 18:51:40 +02:00
{
2020-04-20 19:39:30 +02:00
Socket tcp4Socket = new Socket(AddressFamily.INET, SocketType.STREAM);
tcp4Socket.bind(address);
return tcp4Socket;
2020-04-20 18:51:40 +02:00
}
override public string toString()
{
2020-05-09 15:48:04 +02:00
string address = "tcp4://"~super.address.toAddrString()~":"~super.address.toPortString();
return address;
}
2020-04-20 18:51:40 +02:00
}
2020-05-09 15:53:25 +02:00
/**
* Represents a stream socket listener over TCP
* on IPv6.
*/
public final class TCP6Listener : BesterListener
2020-04-20 18:51:40 +02:00
{
2020-04-20 19:39:30 +02:00
this(BesterServer besterServer, Address address)
2020-04-20 18:51:40 +02:00
{
super(besterServer);
2020-05-09 16:14:55 +02:00
try
{
setServerSocket(setupTCP6Socket(address));
}
catch(SocketException e)
{
throw new BesterListenerException(this);
}
2020-04-20 18:51:40 +02:00
}
2020-04-20 19:39:30 +02:00
private Socket setupTCP6Socket(Address address)
2020-04-20 18:51:40 +02:00
{
2020-04-20 19:39:30 +02:00
Socket tcp6Socket = new Socket(AddressFamily.INET6, SocketType.STREAM);
tcp6Socket.bind(address);
return tcp6Socket;
2020-04-20 18:51:40 +02:00
}
override public string toString()
{
2020-05-09 15:48:04 +02:00
string address = "tcp6://"~super.address.toAddrString()~":"~super.address.toPortString();
return address;
}
2020-04-20 18:51:40 +02:00
}