in source/coreMQTT/sockets_wrapper.c [259:338]
static BaseType_t prvNetworkRecvCellular( const cellularSocketWrapper_t * pCellularSocketContext,
uint8_t * buf,
size_t len )
{
CellularSocketHandle_t cellularSocketHandle = NULL;
BaseType_t retRecvLength = 0;
uint32_t recvLength = 0;
TickType_t recvTimeout = 0;
TickType_t recvStartTime = 0;
CellularError_t socketStatus = CELLULAR_SUCCESS;
EventBits_t waitEventBits = 0;
cellularSocketHandle = pCellularSocketContext->cellularSocketHandle;
if( pCellularSocketContext->receiveTimeout >= portMAX_DELAY )
{
recvTimeout = portMAX_DELAY;
}
else
{
recvTimeout = pCellularSocketContext->receiveTimeout;
}
recvStartTime = xTaskGetTickCount();
( void ) xEventGroupClearBits( pCellularSocketContext->socketEventGroupHandle,
SOCKET_DATA_RECEIVED_CALLBACK_BIT );
socketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, len, &recvLength );
/* Calculate remain recvTimeout. */
if( recvTimeout != portMAX_DELAY )
{
if( ( recvStartTime + recvTimeout ) > xTaskGetTickCount() )
{
recvTimeout = recvTimeout - ( xTaskGetTickCount() - recvStartTime );
}
else
{
recvTimeout = 0;
}
}
if( ( socketStatus == CELLULAR_SUCCESS ) && ( recvLength == 0U ) &&
( recvTimeout != 0U ) )
{
waitEventBits = xEventGroupWaitBits( pCellularSocketContext->socketEventGroupHandle,
SOCKET_DATA_RECEIVED_CALLBACK_BIT | SOCKET_CLOSE_CALLBACK_BIT,
pdTRUE,
pdFALSE,
recvTimeout );
if( ( waitEventBits & SOCKET_CLOSE_CALLBACK_BIT ) != 0U )
{
socketStatus = CELLULAR_SOCKET_CLOSED;
}
else if( ( waitEventBits & SOCKET_DATA_RECEIVED_CALLBACK_BIT ) != 0U )
{
socketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, len, &recvLength );
}
else
{
IotLogInfo( "prvNetworkRecv timeout" );
socketStatus = CELLULAR_SUCCESS;
recvLength = 0;
}
}
if( socketStatus == CELLULAR_SUCCESS )
{
retRecvLength = ( BaseType_t ) recvLength;
}
else
{
IotLogError( "prvNetworkRecv failed %d", socketStatus );
retRecvLength = SOCKETS_SOCKET_ERROR;
}
IotLogDebug( "prvNetworkRecv expect %d read %d", len, recvLength );
return retRecvLength;
}