protected override void SubStart()
{
DisposeSocket();
try
{
switch (this.localClient.Type)
{
case ChainType.MainNet:
case ChainType.TestNet3:
var externalIPAddress = Messaging.GetExternalIPAddress();
var localhost = Dns.GetHostEntry(Dns.GetHostName());
this.listenSocket = new Socket(externalIPAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
this.listenSocket.Bind(new IPEndPoint(localhost.AddressList.Where(x => x.AddressFamily == externalIPAddress.AddressFamily).First(), Messaging.Port));
break;
case ChainType.Regtest:
this.listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
this.listenSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), Messaging.Port));
break;
}
this.listenSocket.Listen(SERVER_BACKLOG);
}
catch (Exception ex)
{
logger.Error(ex, "Failed to start listener socket.");
DisposeSocket();
throw;
}
}