in src/Proton.TestPeer/Network/PeerTcpServer.cs [187:260]
private static void NewTcpClientConnection(IAsyncResult result)
{
PeerTcpServer server = (PeerTcpServer)result.AsyncState;
try
{
Socket client = server.serverListener.EndAccept(result);
server.logger.LogInformation("Peer Tcp Server accepted new connection: {0}", client.RemoteEndPoint);
client.SendBufferSize = server.options.SendBufferSize;
client.ReceiveBufferSize = server.options.ReceiveBufferSize;
client.NoDelay = server.options.TcpNoDelay;
client.LingerState = new LingerOption(server.options.SoLinger > 0, (int)server.options.SoLinger);
client.SendTimeout = (int)server.options.SendTimeout;
client.ReceiveTimeout = (int)server.options.ReceiveTimeout;
Stream ioStream = new NetworkStream(client);
if (server.options.SslEnabled)
{
try
{
ioStream = server.AuthenticateAsSslServer(ioStream);
}
catch (Exception ex)
{
server.logger.LogWarning(ex, "Server SSL Authentication failed: {0}", ex.Message);
client.Close();
throw;
}
}
// Signal that the client has connected and is ready for scripted action.
server.clientConnectedHandler(
new PeerTcpTransport(server.loggerFactory, PeerTransportRole.Server, client, ioStream));
}
catch (SocketException sockEx)
{
if (!server.closed)
{
server.logger.LogWarning(sockEx, "Server accept failed: {0}, SocketErrorCode:{1}",
sockEx.Message, sockEx.SocketErrorCode);
try
{
server.serverFailedHandler(server, sockEx);
}
catch (Exception)
{ }
}
}
catch (Exception ex)
{
if (!server.closed)
{
server.logger.LogWarning(ex, "Server accept failed: {0}", ex.Message);
try
{
server.serverFailedHandler(server, ex);
}
catch (Exception)
{ }
}
}
finally
{
try
{
server.Stop(); // Only accept one connection.
}
catch (Exception)
{ }
}
}