/// <summary> /// Try to send pending data /// </summary> private void TrySend() { if (!IsConnected) { return; } if (!_sendEventArg.Lock()) { return; } try { // Async send with the send handler _sendEventArg.RemoteEndPoint = _sendEndpoint; _sendEventArg.SetBuffer(_sendBuffer.Array, _sendBuffer.Offset, _sendBuffer.Count); if (!Socket.SendToAsync(_sendEventArg)) { OnAsyncCompleted(null, _sendEventArg); } } catch (ObjectDisposedException) { _sendEventArg.Unlock(); } }
/// <summary> /// Try to receive new data /// </summary> private void TryReceive() { if (!IsConnected) { return; } if (!_receiveEventArg.Lock()) { return; } try { // Async receive with the receive handler _receiveEventArg.RemoteEndPoint = _receiveEndpoint; if (!Socket.ReceiveFromAsync(_receiveEventArg)) { OnAsyncCompleted(null, _receiveEventArg); } } catch (ObjectDisposedException) { _receiveEventArg.Unlock(); } }
/// <summary> /// Try to send pending data /// </summary> private void TrySend() { if (!IsConnected) { Release(); return; } if (!_sendEventArg.Lock()) { return; } // Update statistic BytesPending = 0; BytesSending += _sendQueue.Count; if (_sendQueue.IsEmpty) { _sendEventArg.Unlock(); if (!IsConnected) { Release(); } OnEmpty(); return; } try { // Async send with the send handler ArraySegment <byte> buffer; _sendQueue.TryDequeue(out buffer); _sendEventArg.SetBuffer(buffer.Array, buffer.Offset, buffer.Count); if (!Socket.SendAsync(_sendEventArg)) { OnAsyncCompleted(null, _sendEventArg); } } catch (ObjectDisposedException) { _sendEventArg.Unlock(); Release(); } }
/// <summary> /// Try to receive new data /// </summary> private void TryReceive() { if (!_receiveEventArg.Lock()) { return; } try { // Async receive with the receive handler if (!Socket.ReceiveAsync(_receiveEventArg)) { OnAsyncCompleted(null, _receiveEventArg); } } catch (ObjectDisposedException) { _receiveEventArg.Unlock(); Release(); } }