int
makeUdpConnection (void )
Concurrency | rsSequentialConcurrency | Visibility | rsProtected |
Code
static const char loopback[] = { 127, 0, 0, 1 }; // in network order
sockaddr_in _inet_addr;
sockaddr * _sock_addr = (sockaddr *)&_inet_addr; //lint !e740
RTMemoryUtil::memset( (void *)&_inet_addr, 0, sizeof( _inet_addr ) );
_inet_addr.sin_family = AF_INET;
_inet_addr.sin_port = htons( 0 );
RTMemoryUtil::memcpy( (void *)&_inet_addr.sin_addr,
(const void *)loopback, sizeof( loopback ) );
int length = sizeof( _inet_addr );
int fd;
if( (fd = socket( AF_INET, SOCK_DGRAM, 0 )) < 0 )
log.show("CustomTCPLayer: Failed to create internal UDP socket\n");
else if( bind( fd, _sock_addr, sizeof( _inet_addr ) ) < 0 )
{
log.show("CustomTCPLayer: Failed to bind internal UDP socket\n");
fd = -1;
}
else if( getsockname( fd, _sock_addr, &length ) < 0 )
{
log.show("CustomTCPLayer: Failed getsockname on internal UDP socket\n");
fd = -1;
}
else if( connect( fd, _sock_addr, sizeof( _inet_addr ) ) < 0 )
{
log.show("CustomTCPLayer: Connect failed for internal UDP socket\n");
(void)close( fd );
fd = -1;
}
return fd;
Parameter Not Named