コード例 #1
0
        static void SocketHandler(object sender, SocketAsyncEventArgs args)
        {
            AsyncCommand command = args.UserToken as AsyncCommand;

            if (args.SocketError != SocketError.Success)
            {
                command.RetryAfterInit(command.GetAerospikeException(args.SocketError));
                return;
            }

            try
            {
                switch (args.LastOperation)
                {
                case SocketAsyncOperation.Receive:
                    command.ReceiveEvent();
                    break;

                case SocketAsyncOperation.Send:
                    command.SendEvent();
                    break;

                case SocketAsyncOperation.Connect:
                    command.ConnectionCreated();
                    break;

                default:
                    command.FailOnApplicationError(new AerospikeException("Invalid socket operation: " + args.LastOperation));
                    break;
                }
            }
            catch (AerospikeException.Connection ac)
            {
                command.RetryAfterInit(ac);
            }
            catch (AerospikeException ae)
            {
                // Fail without retry on non-network errors.
                command.FailOnApplicationError(ae);
            }
            catch (SocketException se)
            {
                command.RetryAfterInit(command.GetAerospikeException(se.SocketErrorCode));
            }
            catch (ObjectDisposedException ode)
            {
                // This exception occurs because socket is being used after timeout thread closes socket.
                // Retry when this happens.
                command.RetryAfterInit(new AerospikeException(ode));
            }
            catch (Exception e)
            {
                // Fail without retry on unknown errors.
                command.FailOnApplicationError(new AerospikeException(e));
            }
        }
コード例 #2
0
        static void SocketHandler(object sender, SocketAsyncEventArgs args)
        {
            AsyncCommand command = args.UserToken as AsyncCommand;

            if (args.SocketError != SocketError.Success)
            {
                command.RetryAfterInit(GetAerospikeException(args.SocketError));
                return;
            }

            try
            {
                switch (args.LastOperation)
                {
                case SocketAsyncOperation.Receive:
                    command.ReceiveEvent();
                    break;

                case SocketAsyncOperation.Send:
                    command.SendEvent();
                    break;

                case SocketAsyncOperation.Connect:
                    command.ConnectionCreated();
                    break;

                default:
                    command.FailOnApplicationError(new AerospikeException("Invalid socket operation: " + args.LastOperation));
                    break;
                }
            }
            catch (AerospikeException.Connection ac)
            {
                command.RetryAfterInit(ac);
            }
            catch (AerospikeException e)
            {
                // Fail without retry on non-network errors.
                command.FailOnApplicationError(e);
            }
            catch (SocketException se)
            {
                command.RetryAfterInit(GetAerospikeException(se.SocketErrorCode));
            }
            catch (Exception e)
            {
                // Fail without retry on unknown errors.
                command.FailOnApplicationError(new AerospikeException(e));
            }
        }
コード例 #3
0
            private void HandleSocketEvent(object sender, SocketAsyncEventArgs args)
            {
                AsyncCommand command = args.UserToken as AsyncCommand;

                if (args.SocketError != SocketError.Success)
                {
                    command.ConnectionFailed(command.GetAerospikeException(args.SocketError));
                    return;
                }

                try
                {
                    switch (args.LastOperation)
                    {
                    case SocketAsyncOperation.Receive:
                        command.ReceiveEvent();
                        break;

                    case SocketAsyncOperation.Send:
                        command.SendEvent();
                        break;

                    case SocketAsyncOperation.Connect:
                        command.ConnectionCreated();
                        break;

                    default:
                        command.FailOnApplicationError(new AerospikeException("Invalid socket operation: " + args.LastOperation));
                        break;
                    }
                }
                catch (AerospikeException.Connection ac)
                {
                    command.ConnectionFailed(ac);
                }
                catch (AerospikeException ae)
                {
                    // Fail without retry on non-network errors.
                    if (ae.Result == ResultCode.TIMEOUT)
                    {
                        // Create server timeout exception.
                        command.FailOnApplicationError(new AerospikeException.Timeout(command.policy, false));
                    }
                    else if (ae.Result == ResultCode.DEVICE_OVERLOAD)
                    {
                        command.DeviceOverload(ae);
                    }
                    else
                    {
                        command.FailOnApplicationError(ae);
                    }
                }
                catch (SocketException se)
                {
                    command.ConnectionFailed(command.GetAerospikeException(se.SocketErrorCode));
                }
                catch (ObjectDisposedException ode)
                {
                    // This exception occurs because socket is being used after timeout thread closes socket.
                    // Retry when this happens.
                    command.ConnectionFailed(new AerospikeException(ode));
                }
                catch (Exception e)
                {
                    // Fail without retry on unknown errors.
                    command.FailOnApplicationError(new AerospikeException(e));
                }
            }