// 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 ); }
INT32 ossGetHostName( CHAR * pName, INT32 nameLen ) { INT32 rc = ossInitSocket() ; if ( SDB_OK == rc ) { rc = gethostname ( pName, nameLen ) ; } return rc ; }
// 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 ); }
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 ; }
// 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 ); }
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 ; }