recursive subroutine ESMF_GridCompSetServicesSock(gridcomp, port, &
keywordEnforcer, server, timeout, timeoutFlag, rc)
!
! !ARGUMENTS:
type(ESMF_GridComp), intent(inout) :: gridcomp
integer, intent(in) :: port
type(ESMF_KeywordEnforcer), optional:: keywordEnforcer ! must use keywords below
character(len=*), intent(in), optional :: server
integer, intent(in), optional :: timeout
logical, intent(out), optional :: timeoutFlag
integer, intent(out), optional :: rc
!
! !DESCRIPTION:
! Set the services of a Gridded Component to serve a "dual" Component for an
! "actual" Component. The component tunnel is socket based.
!
! The arguments are:
! \begin{description}
! \item[gridcomp]
! Dual Gridded Component.
! \item[port]
! Port number under which the actual component is being served. The valid
! port range is [1024, 65535].
! \item[{[server]}]
! Server name where the actual component is being served. The default, i.e.
! if the {\tt server} argument was not provided, is {\tt localhost}.
! \item[{[timeout]}]
! The maximum period in seconds that this call will wait in communications
! with the actual component, before returning with a timeout condition.
! The default is 3600, i.e. 1 hour.
! \item[{[timeoutFlag]}]
! Returns {\tt .true.} if the timeout was reached, {\tt .false.} otherwise.
! If {\tt timeoutFlag} was {\em not} provided, a timeout condition will lead
! to a return code of {\tt rc \textbackslash = ESMF\_SUCCESS}. Otherwise the
! return value of {\tt timeoutFlag} is the sole indicator of a timeout
! condition.
! \item[{[rc]}]
! Return code; equals {\tt ESMF\_SUCCESS} if there are no errors.
! \end{description}
!
!EOP
!------------------------------------------------------------------------------
integer :: localrc ! local error status
integer :: timeoutArg
! initialize return code; assume routine not implemented
if (present(rc)) rc = ESMF_RC_NOT_IMPL
localrc = ESMF_RC_NOT_IMPL
ESMF_INIT_CHECK_DEEP(ESMF_GridCompGetInit, gridcomp, rc)
timeoutArg = ESMF_DEFAULT_TIMEOUT ! default 1h
if (present(timeout)) timeoutArg = timeout
if (present(server)) then
call c_ESMC_SetServicesSock(gridcomp, gridcomp%compp%compTunnel, &
port, server, timeoutArg, localrc)
else
call c_ESMC_SetServicesSock(gridcomp, gridcomp%compp%compTunnel, &
port, "localhost", timeoutArg, localrc)
endif
! conditionally filter out the RC_TIMEOUT and return success
if (present(timeoutFlag)) then
timeoutFlag = .false. ! initialize
if ((localrc==ESMF_RC_TIMEOUT).or.(localrc==ESMC_RC_TIMEOUT)) then
timeoutFlag = .true. ! indicate timeout through flag argument
localrc = ESMF_SUCCESS ! do not raise error condition on user level
endif
endif
if (ESMF_LogFoundError(localrc, &
ESMF_ERR_PASSTHRU, &
ESMF_CONTEXT, rcToReturn=rc)) return
! now indicate that this Component has a VM associated
gridcomp%compp%compStatus%vmIsPresent = .true.
! return successfully
if (present(rc)) rc = ESMF_SUCCESS
end subroutine ESMF_GridCompSetServicesSock