예제 #1
0
        public override uint ReceiveAsync(ref SNIPacket packet)
        {
            long scopeID = SqlClientEventSource.Log.TrySNIScopeEnterEvent("<sc.SNI.SNINpHandle.ReceiveAsync |SNI|SCOPE>");

            try
            {
                SNIPacket errorPacket;
                packet = RentPacket(headerSize: 0, dataSize: _bufferSize);

                try
                {
                    packet.ReadFromStreamAsync(_stream, _receiveCallback);
                    return(TdsEnums.SNI_SUCCESS_IO_PENDING);
                }
                catch (ObjectDisposedException ode)
                {
                    errorPacket = packet;
                    packet      = null;
                    SqlClientEventSource.Log.TrySNITraceEvent("<sc.SNI.SNINpHandle.ReceiveAsync |SNI|ERR> ObjectDisposedException message = {0}.", ode.Message);
                    return(ReportErrorAndReleasePacket(errorPacket, ode));
                }
                catch (IOException ioe)
                {
                    errorPacket = packet;
                    packet      = null;
                    SqlClientEventSource.Log.TrySNITraceEvent("<sc.SNI.SNINpHandle.ReceiveAsync |SNI|ERR> IOException message = {0}.", ioe.Message);
                    return(ReportErrorAndReleasePacket(errorPacket, ioe));
                }
            }
            finally
            {
                SqlClientEventSource.Log.TrySNIScopeLeaveEvent(scopeID);
            }
        }
예제 #2
0
        public override uint ReceiveAsync(ref SNIPacket packet)
        {
            using (TrySNIEventScope.Create(nameof(SNINpHandle)))
            {
                SNIPacket errorPacket;
                packet = RentPacket(headerSize: 0, dataSize: _bufferSize);

                try
                {
                    packet.ReadFromStreamAsync(_stream, _receiveCallback);
                    SqlClientEventSource.Log.TrySNITraceEvent(nameof(SNINpHandle), EventType.INFO, "Connection Id {0}, Rented and read packet asynchronously, dataLeft {1}", args0: _connectionId, args1: packet?.DataLeft);
                    return(TdsEnums.SNI_SUCCESS_IO_PENDING);
                }
                catch (ObjectDisposedException ode)
                {
                    errorPacket = packet;
                    packet      = null;
                    SqlClientEventSource.Log.TrySNITraceEvent(nameof(SNINpHandle), EventType.ERR, "Connection Id {0}, ObjectDisposedException occurred: {1}.", args0: _connectionId, args1: ode?.Message);
                    return(ReportErrorAndReleasePacket(errorPacket, ode));
                }
                catch (IOException ioe)
                {
                    errorPacket = packet;
                    packet      = null;
                    SqlClientEventSource.Log.TrySNITraceEvent(nameof(SNINpHandle), EventType.ERR, "Connection Id {0}, IOException occurred: {1}.", args0: _connectionId, args1: ioe?.Message);
                    return(ReportErrorAndReleasePacket(errorPacket, ioe));
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Receive a packet asynchronously
        /// </summary>
        /// <param name="packet">SNI packet</param>
        /// <returns>SNI error code</returns>
        public override uint ReceiveAsync(ref SNIPacket packet)
        {
            packet = new SNIPacket(_bufferSize);

            try
            {
                packet.ReadFromStreamAsync(_stream, _receiveCallback);
                return(TdsEnums.SNI_SUCCESS_IO_PENDING);
            }
            catch (Exception e) when(e is ObjectDisposedException || e is SocketException || e is IOException)
            {
                return(ReportErrorAndReleasePacket(packet, e));
            }
        }
예제 #4
0
        /// <summary>
        /// Receive a packet asynchronously
        /// </summary>
        /// <param name="packet">SNI packet</param>
        /// <returns>SNI error code</returns>
        public override uint ReceiveAsync(ref SNIPacket packet)
        {
            SNIPacket errorPacket;

            packet = RentPacket(headerSize: 0, dataSize: _bufferSize);

            try
            {
                packet.ReadFromStreamAsync(_stream, _receiveCallback);
                SqlClientEventSource.Log.TrySNITraceEvent(s_className, EventType.INFO, "Connection Id {0}, Data received from stream asynchronously", args0: _connectionId);
                return(TdsEnums.SNI_SUCCESS_IO_PENDING);
            }
            catch (Exception e) when(e is ObjectDisposedException || e is SocketException || e is IOException)
            {
                errorPacket = packet;
                packet      = null;
                return(ReportErrorAndReleasePacket(errorPacket, e));
            }
        }
예제 #5
0
        public override uint ReceiveAsync(ref SNIPacket packet)
        {
            SNIPacket errorPacket;

            packet = new SNIPacket(headerSize: 0, dataSize: _bufferSize);

            try
            {
                packet.ReadFromStreamAsync(_stream, _receiveCallback);
                return(TdsEnums.SNI_SUCCESS_IO_PENDING);
            }
            catch (ObjectDisposedException ode)
            {
                errorPacket = packet;
                packet      = null;
                return(ReportErrorAndReleasePacket(errorPacket, ode));
            }
            catch (IOException ioe)
            {
                errorPacket = packet;
                packet      = null;
                return(ReportErrorAndReleasePacket(errorPacket, ioe));
            }
        }