データを受信し、処理のために読み取るソケット接続があります。
データがソケットから十分に速く処理/プルされない場合、TCP レベルでボトルネックが発生し、受信データが遅延します (解析後の tmestamps でわかります)。
ソケットによる読み取りを待機している TCP バイト数を確認するにはどうすればよいですか? (WireShark などの外部ツールを介して)
private void InitiateRecv(IoContext rxContext)
{
rxContext._ipcSocket.BeginReceive(rxContext._ipcBuffer.Buffer, rxContext._ipcBuffer.WrIndex,
rxContext._ipcBuffer.Remaining(), 0, CompleteRecv, rxContext);
}
private void CompleteRecv(IAsyncResult ar)
{
IoContext rxContext = ar.AsyncState as IoContext;
if (rxContext != null)
{
int rxBytes = rxContext._ipcSocket.EndReceive(ar);
if (rxBytes > 0)
{
EventHandler<VfxIpcEventArgs> dispatch = EventDispatch;
dispatch (this, new VfxIpcEventArgs(rxContext._ipcBuffer));
InitiateRecv(rxContext);
}
}
}
事実は、「ディスパッチ」が何らかの形でそれが完了するまで受信をブロックしていると推測していることです (つまり、処理されたデータがディスパッチによって遅延されるため、データが蓄積されたという私の (間違った?) 結論)ソケットレベルまたはそれ以前。