in platform/posix/transport/src/sockets_posix.c [146:216]
static SocketStatus_t connectToAddress( struct sockaddr * pAddrInfo,
uint16_t port,
int32_t tcpSocket )
{
SocketStatus_t returnStatus = SOCKETS_SUCCESS;
int32_t connectStatus = 0;
char resolvedIpAddr[ INET6_ADDRSTRLEN ];
socklen_t addrInfoLength;
uint16_t netPort = 0;
struct sockaddr_in * pIpv4Address;
struct sockaddr_in6 * pIpv6Address;
assert( pAddrInfo != NULL );
assert( pAddrInfo->sa_family == AF_INET || pAddrInfo->sa_family == AF_INET6 );
assert( tcpSocket >= 0 );
/* Convert port from host byte order to network byte order. */
netPort = htons( port );
if( pAddrInfo->sa_family == ( sa_family_t ) AF_INET )
{
/* MISRA Rule 11.3 flags the following line for casting a pointer of
* a object type to a pointer of a different object type. This rule
* is suppressed because casting from a struct sockaddr pointer to
* a struct sockaddr_in pointer is supported in POSIX and is used
* to obtain the IP address from the address record. */
/* coverity[misra_c_2012_rule_11_3_violation] */
pIpv4Address = ( struct sockaddr_in * ) pAddrInfo;
/* Store IPv4 in string to log. */
pIpv4Address->sin_port = netPort;
addrInfoLength = ( socklen_t ) sizeof( struct sockaddr_in );
( void ) inet_ntop( ( int32_t ) pAddrInfo->sa_family,
&pIpv4Address->sin_addr,
resolvedIpAddr,
( socklen_t ) sizeof( resolvedIpAddr ) );
}
else
{
/* MISRA Rule 11.3 flags the following line for casting a pointer of
* a object type to a pointer of a different object type. This rule
* is suppressed because casting from a struct sockaddr pointer to
* a struct sockaddr_in6 pointer is supported in POSIX and is used
* to obtain the IPv6 address from the address record. */
/* coverity[misra_c_2012_rule_11_3_violation] */
pIpv6Address = ( struct sockaddr_in6 * ) pAddrInfo;
/* Store IPv6 in string to log. */
pIpv6Address->sin6_port = netPort;
addrInfoLength = ( socklen_t ) sizeof( struct sockaddr_in6 );
( void ) inet_ntop( ( int32_t ) pAddrInfo->sa_family,
&pIpv6Address->sin6_addr,
resolvedIpAddr,
( socklen_t ) sizeof( resolvedIpAddr ) );
}
LogDebug( ( "Attempting to connect to server using the resolved IP address:"
" IP address=%s.",
resolvedIpAddr ) );
/* Attempt to connect. */
connectStatus = connect( tcpSocket, pAddrInfo, addrInfoLength );
if( connectStatus == -1 )
{
LogWarn( ( "Failed to connect to server using the resolved IP address: IP address=%s.",
resolvedIpAddr ) );
( void ) close( tcpSocket );
returnStatus = SOCKETS_CONNECT_FAILURE;
}
return returnStatus;
}