Example #1
0
        private void InitSocket(Socket socket)
        {
            Console.WriteLine("TcpConnection::InitSocket({0})", socket.RemoteEndPoint);
            base.InitSocket(socket, EffectiveEndPoint);
            lock (_sendingLock)
            {
                _socket = socket;
                try
                {
                    socket.NoDelay = true;
                    //socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, TcpConfiguration.SocketBufferSize);
                    //socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendBuffer, TcpConfiguration.SocketBufferSize);
                }
                catch (ObjectDisposedException)
                {
                    CloseInternal(SocketError.Shutdown);
                    _socket = null;
                    return;
                }

                _receiveSocketArgs = SocketArgsPool.Get();
                _receiveSocketArgs.AcceptSocket = socket;
                _receiveSocketArgs.Completed   += OnReceiveAsyncCompleted;

                _sendSocketArgs = SocketArgsPool.Get();
                _sendSocketArgs.AcceptSocket = socket;
                _sendSocketArgs.Completed   += OnSendAsyncCompleted;
            }
            StartReceive();
        }
Example #2
0
        private void InitSocket(Socket socket)
        {
            InitConnectionBase(socket);
            using (_sendingLock.Acquire())
            {
                _socket = socket;
                try
                {
                    socket.NoDelay = true;
                }
                catch (ObjectDisposedException)
                {
                    CloseInternal(SocketError.Shutdown, "Socket disposed.");
                    _socket = null;
                    return;
                }

                var receiveSocketArgs = SocketArgsPool.Get();
                _receiveSocketArgs = receiveSocketArgs;
                _receiveSocketArgs.AcceptSocket = socket;
                _receiveSocketArgs.Completed   += OnReceiveAsyncCompleted;

                var sendSocketArgs = SocketArgsPool.Get();
                _sendSocketArgs = sendSocketArgs;
                _sendSocketArgs.AcceptSocket = socket;
                _sendSocketArgs.Completed   += OnSendAsyncCompleted;
            }
            StartReceive();
            TrySend();
        }
        private bool InitSocket(Socket socket)
        {
            InitConnectionBase(socket);
            try
            {
                socket.NoDelay = true;
            }
            catch (ObjectDisposedException)
            {
                CloseInternal(SocketError.Shutdown, "Socket disposed.");
                return(false);
            }

            var receiveSocketArgs = SocketArgsPool.Get();

            receiveSocketArgs.AcceptSocket = socket;
            receiveSocketArgs.Completed   += OnReceiveAsyncCompleted;

            var sendSocketArgs = SocketArgsPool.Get();

            sendSocketArgs.AcceptSocket = socket;
            sendSocketArgs.Completed   += OnSendAsyncCompleted;

            Interlocked.Exchange(ref _socket, socket);
            Interlocked.Exchange(ref _receiveSocketArgs, receiveSocketArgs);
            Interlocked.Exchange(ref _sendSocketArgs, sendSocketArgs);

            if (Interlocked.CompareExchange(ref _closed, 0, 0) != 0)
            {
                CloseSocket();
                ReturnReceivingSocketArgs();
                if (Interlocked.CompareExchange(ref _sending, 1, 0) == 0)
                {
                    ReturnSendingSocketArgs();
                }
                return(false);
            }

            return(true);
        }
Example #4
0
        private void StartAccepting()
        {
            var socketArgs = _acceptSocketArgsPool.Get();

            try {
                var firedAsync = _listeningSocket.AcceptAsync(socketArgs);
                if (!firedAsync)
                {
                    ProcessAccept(socketArgs);
                }
            } catch (ObjectDisposedException) {
                HandleBadAccept(socketArgs);
            }
        }