private void OnSendCompleted(object sender, SocketAsyncEventArgs e)
{
if (e.SocketError != SocketError.Success || e.BytesTransferred == 0)
{
// ignore errors, let the receiving end take care of that.
return;
}
try
{
var isComplete = _encoder.OnSendCompleted(e.BytesTransferred);
if (!isComplete)
{
_encoder.Send(_writeArgsWrapper);
var isPending = _socket.SendAsync(_writeArgs);
if (!isPending)
OnSendCompleted(this, _writeArgs);
return;
}
_sendLock.Release();
_sendCompleteAction(this, _messagePendingSendOperation);
}
catch (Exception ex)
{
_sendLock.Release();
OnChannelFailure(ex);
}
}