code: func (agent *ecsAgent) startACSSession(
  	credentialsManager credentials.Manager,
  	taskEngine engine.TaskEngine,
  	stateManager statemanager.StateManager,
  	deregisterInstanceEventStream *eventstream.EventStream,
  	client api.ECSClient,
  	state dockerstate.TaskEngineState,
  	taskHandler *eventhandler.TaskHandler) int {
  
  	acsSession := acshandler.NewSession(
  		agent.ctx,
  		agent.cfg,
  		deregisterInstanceEventStream,
  		agent.containerInstanceARN,
  		agent.credentialProvider,
  		client,
  		state,
  		stateManager,
  		taskEngine,
  		credentialsManager,
  		taskHandler,
  	)
  	seelog.Info("Beginning Polling for updates")
  	err := acsSession.Start()
  	if err != nil {
  		seelog.Criticalf("Unretriable error starting communicating with ACS: %v", err)
  		return exitcodes.ExitTerminal
  	}
  	seelog.Critical("ACS Session handler should never exit")
  	return exitcodes.ExitError
  }
docs: // startACSSession starts a session with ECS's Agent Communication service. This
  // is a blocking call and only returns when the handler returns