Esempio n. 1
0
        public SocketAwaitable SendAsync(ReadOnlySequence <byte> buffers)
        {
            if (buffers.IsSingleSegment)
            {
                return(SendAsync(buffers.First));
            }

#if NETCOREAPP2_1
            if (!_eventArgs.MemoryBuffer.Equals(Memory <byte> .Empty))
#else
            if (_eventArgs.Buffer != null)
#endif
            {
                _eventArgs.SetBuffer(null, 0, 0);
            }

            _eventArgs.BufferList = GetBufferList(buffers);

            if (!_socket.SendAsync(_eventArgs))
            {
                _awaitable.Complete(_eventArgs.BytesTransferred, _eventArgs.SocketError);
            }

            return(_awaitable);
        }
Esempio n. 2
0
        public SocketAwaitable SendAsync(ReadableBuffer buffers)
        {
            if (buffers.IsSingleSpan)
            {
                return(SendAsync(buffers.First));
            }

            if (_eventArgs.Buffer != null)
            {
                _eventArgs.SetBuffer(null, 0, 0);
            }

            _eventArgs.BufferList = GetBufferList(buffers);

            if (!_socket.SendAsync(_eventArgs))
            {
                _awaitable.Complete(_eventArgs.BytesTransferred, _eventArgs.SocketError);
            }

            return(_awaitable);
        }
        public SocketAwaitable ReceiveAsync(Buffer <byte> buffer)
        {
            var segment = buffer.GetArray();

            _eventArgs.SetBuffer(segment.Array, segment.Offset, segment.Count);

            if (!_socket.ReceiveAsync(_eventArgs))
            {
                _awaitable.Complete(_eventArgs.BytesTransferred, _eventArgs.SocketError);
            }

            return(_awaitable);
        }
Esempio n. 4
0
        public SocketAwaitable ReceiveAsync(Memory <byte> buffer)
        {
#if NETCOREAPP2_1
            _eventArgs.SetBuffer(buffer);
#else
            var segment = buffer.GetArray();

            _eventArgs.SetBuffer(segment.Array, segment.Offset, segment.Count);
#endif
            if (!_socket.ReceiveAsync(_eventArgs))
            {
                _awaitable.Complete(_eventArgs.BytesTransferred, _eventArgs.SocketError);
            }

            return(_awaitable);
        }
        private static void SendCompleted(SocketAsyncEventArgs e, SocketAwaitable awaitable)
        {
            // Clear buffer(s) to prevent the SetBuffer buffer and BufferList from both being
            // set for the next write operation. This is unnecessary for reads since they never
            // set BufferList.

            if (e.BufferList != null)
            {
                e.BufferList.Clear();
                e.BufferList = null;
            }
            else
            {
                e.SetBuffer(null, 0, 0);
            }

            awaitable.Complete(e.BytesTransferred, e.SocketError);
        }