public override bool TrySend(IList<ArraySegment<byte>> segments)
{
if (segments == null || segments.Count == 0)
{
throw new ArgumentNullException("segments");
}
for (var i = 0; i < segments.Count; i++)
{
var seg = segments[i];
if (seg.Count == 0)
{
throw new Exception("The data piece to be sent cannot be empty.");
}
}
if (!DetectConnected())
{
//may be return false?
return true;
}
var isEnqueued = GetSendingQueue().Enqueue(segments);
if (Interlocked.CompareExchange(ref m_IsSending, 1, 0) != 0)
return isEnqueued;
DequeueSend();
return isEnqueued;
}