BeginXXX(AMP)またはXXXAsync(TAP)が.NetFrameworkでIOCPを使用していることはすでに分かっていますが、今はdotnetcoreでhttpServerビルドを構築したいと考えています。私は内部メカニズムを知る必要があります。DotnetCore 1.0.xのTcpListener.BeginAcceptTcpClient I/Oモデルとは
次のコードのような.NetworkFrameworkで私の透水性バージョン:
private void continueAccept(TcpListener tcpListener,Action<TcpClient> processConnection)
{
//IOCP
tcpListener.BeginAcceptTcpClient(ar =>
{
if (listening)
continueAccept(tcpListener, processConnection);
else
return;
try
{
TcpClient tcpClient = tcpListener.EndAcceptTcpClient(ar);
acceptCount++;
tcpClient.SendTimeout = 300000;
tcpClient.ReceiveTimeout = 300000;
ConsoleHost1.trace(System.Diagnostics.TraceEventType.Verbose, $"Client Accept { tcpClient.Client.RemoteEndPoint.ToString()}");
ThreadPool.QueueUserWorkItem((o) => {
processConnection((TcpClient)o);
}, tcpClient);
}
catch (Exception e)
{
ConsoleHost1.trace(System.Diagnostics.TraceEventType.Error, $"acceptTD:{e.Message}");
}
}, null);
}
public void startListen(Action<TcpClient> processConnection)
{
tcpListener = new TcpListener(IPAddress.Parse("0.0.0.0"), port1);
tcpListener.Start(maxQueue1);
listening = true;
continueAccept(tcpListener, processConnection);
}