Ejemplo n.º 1
0
        /// <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();
            }
        }
Ejemplo n.º 2
0
        /// <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();
            }
        }
Ejemplo n.º 3
0
        /// <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();
            }
        }
Ejemplo n.º 4
0
        /// <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();
            }
        }