private void StartReceive()
{
var buffer = new byte[4096];
lock (_receiveSocketArgs)
{
_receiveSocketArgs.SetBuffer(buffer, 0, buffer.Length);
if (_receiveSocketArgs.Buffer == null)
throw new Exception("Buffer was not set");
}
try
{
Interlocked.Increment(ref _recvAsyncs);
NotifyReceiveStarting();
bool firedAsync;
lock (_receiveSocketArgs) {
if (_receiveSocketArgs.Buffer == null)
throw new Exception("Buffer was lost");
firedAsync = _receiveSocketArgs.AcceptSocket.ReceiveAsync(_receiveSocketArgs);
}
if (!firedAsync) {
Console.WriteLine("SYNC receive");
ProcessReceive(_receiveSocketArgs);
}
}
catch (ObjectDisposedException)
{
ReturnReceivingSocketArgs();
}
}