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)); } }
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)); } }
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)); } }