Example #1
0
// PD_TRACE_DECLARE_FUNCTION ( SDB__OSSSK__OSSSK3, "_ossSocket::_ossSocket" )
_ossSocket::_ossSocket ( SOCKET *sock, INT32 timeoutMilli )
{
   SDB_ASSERT ( sock, "Input sock is NULL" ) ;
   INT32 rc = SDB_OK ;
   PD_TRACE_ENTRY ( SDB__OSSSK__OSSSK3 );
   _fd = *sock ;
   _init = TRUE ;
   _timeout = timeoutMilli ;
   _closeWhenDestruct = TRUE ;
   _addressLen = sizeof ( _sockAddress ) ;

   ossMemset ( &_peerAddress, 0, sizeof(sockaddr_in) ) ;
   _peerAddressLen = sizeof ( _peerAddress ) ;

   ossInitSocket() ;

   rc = getsockname ( _fd, (sockaddr*)&_sockAddress, &_addressLen ) ;
   if ( rc )
   {
      PD_LOG ( PDERROR, "Failed to getsockname from socket %d", _fd ) ;
      _init = FALSE ;
   }
   else
   {
      rc = getpeername ( _fd, (sockaddr*)&_peerAddress, &_peerAddressLen ) ;
      if ( rc )
      {
         PD_LOG ( PDERROR, "Failed to getpeername from socket %d", _fd ) ;
      }
   }
   setTimeout ( _timeout ) ;
   PD_TRACE_EXIT ( SDB__OSSSK__OSSSK3 );
}
Example #2
0
INT32 ossGetHostName( CHAR * pName, INT32 nameLen )
{
   INT32 rc = ossInitSocket() ;

   if ( SDB_OK == rc )
   {
      rc = gethostname ( pName, nameLen ) ;
   }
   return rc ;
}
Example #3
0
// PD_TRACE_DECLARE_FUNCTION ( SDB__OSSSK__OSSSK2, "_ossSocket::_ossSocket" )
_ossSocket::_ossSocket ( const CHAR *pHostname, UINT32 port,
                         INT32 timeoutMilli )
{
   PD_TRACE_ENTRY ( SDB__OSSSK__OSSSK2 );
   struct hostent *hp ;
   _init = FALSE ;
   _closeWhenDestruct = TRUE;
   _timeout = timeoutMilli ;
   _fd = SOCKET_INVALIDSOCKET ;
   ossMemset ( &_sockAddress, 0, sizeof(sockaddr_in) ) ;
   ossMemset ( &_peerAddress, 0, sizeof(sockaddr_in) ) ;
   _peerAddressLen = sizeof (_peerAddress) ;

   ossInitSocket() ;

   _sockAddress.sin_family = AF_INET ;
#if defined (_WINDOWS)
   if ( (hp = gethostbyname ( pHostname )))
#elif defined (_LINUX)
   struct hostent hent ;
   struct hostent *retval = NULL ;
   INT32 error            = 0 ;
   CHAR hbuf[8192]        = {0} ;
   hp                     = &hent ;

   if ( (0 == gethostbyname_r ( pHostname, &hent, hbuf, sizeof(hbuf),
                                &retval, &error )) &&
         NULL != retval )
#endif
   {
      UINT32 *pAddr = (UINT32 *)hp->h_addr_list[0] ;
      if ( pAddr )
      {
         _sockAddress.sin_addr.s_addr = *pAddr ;
      }
   }
   else
   {
      _sockAddress.sin_addr.s_addr = inet_addr ( pHostname ) ;
   }
   _sockAddress.sin_port = htons ( port ) ;
   _addressLen = sizeof ( _sockAddress ) ;
#ifdef SDB_SSL
   _sslHandle = NULL;
#endif
   PD_TRACE_EXIT ( SDB__OSSSK__OSSSK2 );
}
Example #4
0
INT32 ossGetPort( const CHAR * pServiceName, UINT16 & port )
{
   INT32 rc = ossInitSocket() ;

   if ( SDB_OK == rc )
   {
      struct servent *servinfo ;
      servinfo = getservbyname ( pServiceName, "tcp" ) ;
      if ( !servinfo )
      {
         port = atoi ( pServiceName ) ;
      }
      else
      {
         port = (UINT16)ntohs(servinfo->s_port) ;
      }
   }
   return rc ;
}
Example #5
0
// PD_TRACE_DECLARE_FUNCTION ( SDB__OSSSK__OSSSK, "_ossSocket::_ossSocket" )
_ossSocket::_ossSocket ( UINT32 port, INT32 timeoutMilli )
{
   PD_TRACE_ENTRY ( SDB__OSSSK__OSSSK );
   _init = FALSE ;
   _fd = SOCKET_INVALIDSOCKET ;
   _timeout = timeoutMilli ;
   _closeWhenDestruct = TRUE ;
   ossMemset ( &_sockAddress, 0, sizeof(sockaddr_in) ) ;
   ossMemset ( &_peerAddress, 0, sizeof(sockaddr_in) ) ;
   _peerAddressLen = sizeof (_peerAddress) ;

   ossInitSocket() ;

   _sockAddress.sin_family = AF_INET ;
   _sockAddress.sin_addr.s_addr = htonl ( INADDR_ANY ) ;
   _sockAddress.sin_port = htons ( port ) ;
   _addressLen = sizeof ( _sockAddress ) ;
   PD_TRACE_EXIT ( SDB__OSSSK__OSSSK );
}
Example #6
0
INT32 ossGetAddrInfo( sockaddr_in * addr, CHAR * pAddress, UINT32 length,
                      UINT16 * pPort )
{
   INT32 rc = ossInitSocket() ;

   if ( SDB_OK == rc )
   {
      length = length < OSS_MAX_HOSTNAME ? length : OSS_MAX_HOSTNAME ;
      rc = getnameinfo ( (struct sockaddr *)addr, sizeof(sockaddr), pAddress,
                         length, NULL, 0, NI_NUMERICHOST ) ;
      if ( rc )
      {
         PD_LOG ( PDERROR, "Failed to getnameinfo, rc = %d",
                  SOCKET_GETLASTERROR ) ;
         rc = SDB_NETWORK ;
      }
      if ( pPort )
      {
         *pPort = ntohs ( addr->sin_port ) ;
      }
   }

   return rc ;
}