public EndPointListener (IPAddress addr, int port, bool secure)
{
if (secure) {
this.secure = secure;
LoadCertificateAndKey (addr, port);
}
endpoint = new IPEndPoint (addr, port);
sock = new Socket (addr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
sock.Bind (endpoint);
sock.Listen (500);
SocketAsyncEventArgs args = new SocketAsyncEventArgs ();
args.UserToken = this;
args.Completed += OnAccept;
sock.AcceptAsync (args);
prefixes = new Hashtable ();
plock = new ReaderWriterLock ();
}