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