以下のこのメソッド (UDP ソケット上) でスタック オーバーフロー例外を報告する顧客がいます。ドキュメントには、Socket.RecieveFromAsync が同期的に戻ることができると書かれていますが、単体テストでそれを行う方法がわかりません。テスト目的でそのメソッドを強制的に同期的に返すにはどうすればよいですか?
private void OnReceive(object sender, SocketAsyncEventArgs e)
{
if (e != null)
{
var length = e.BytesTransferred;
if (length > 0)
{
FireBytesReceivedFrom(datagram, length, (IPEndPoint) e.RemoteEndPoint);
}
e.Dispose();
}
var s = _socket;
if (s != null)
{
var args = new SocketAsyncEventArgs();
try
{
args.RemoteEndPoint = _remoteEndPoint;
args.SetBuffer(datagram, 0, datagram.Length);
args.Completed += OnReceive;
if (!s.ReceiveFromAsync(args))
OnReceive(this, args); // stack overflow occurs here
}
catch (ObjectDisposedException)
{
// this is expected after a disconnect
args.Dispose();
}
}
}