⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketaddr.c

📁 this is just a test file.please pardon me for the ignorance.ignorance is bliss
💻 C
📖 第 1 页 / 共 2 页
字号:
        memcpy(&(((struct sockaddr_in*)inSockAddr)->sin_addr), *(hostP->h_addr_list),               (hostP->h_length));    }#endif}// end setHostname/* ------------------------------------------------------------------- * Copy the IP address into the string. * ------------------------------------------------------------------- */void SockAddr_getHostAddress( iperf_sockaddr *inSockAddr, char* outAddress,                                 size_t len ) {    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET ) {        inet_ntop( AF_INET, &(((struct sockaddr_in*) inSockAddr)->sin_addr),                    outAddress, len);    }#ifdef HAVE_IPV6    else {        inet_ntop( AF_INET6, &(((struct sockaddr_in6*) inSockAddr)->sin6_addr),                    outAddress, len);    }#endif}// end getHostAddress/* ------------------------------------------------------------------- * Set the address to any (generally all zeros). * ------------------------------------------------------------------- */void SockAddr_setAddressAny( iperf_sockaddr *inSockAddr ) {    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET )        memset( &(((struct sockaddr_in*) inSockAddr)->sin_addr), 0,                 sizeof( struct in_addr ));#if defined(HAVE_IPV6)      else        memset( &(((struct sockaddr_in6*) inSockAddr)->sin6_addr), 0,                 sizeof( struct in6_addr ));#endif}// end setAddressAny/* ------------------------------------------------------------------- * Set the port to the given port. Handles the byte swapping. * ------------------------------------------------------------------- */void SockAddr_setPort( iperf_sockaddr *inSockAddr, unsigned short inPort ) {    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET )        ((struct sockaddr_in*) inSockAddr)->sin_port = htons( inPort );#if defined(HAVE_IPV6)      else        ((struct sockaddr_in6*) inSockAddr)->sin6_port = htons( inPort );#endif}// end setPort/* ------------------------------------------------------------------- * Set the port to zero, which lets the OS pick the port. * ------------------------------------------------------------------- */void SockAddr_setPortAny( iperf_sockaddr *inSockAddr ) {    SockAddr_setPort( inSockAddr, 0 );}// end setPortAny/* ------------------------------------------------------------------- * Return the port. Handles the byte swapping. * ------------------------------------------------------------------- */unsigned short SockAddr_getPort( iperf_sockaddr *inSockAddr ) {    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET )        return ntohs( ((struct sockaddr_in*) inSockAddr)->sin_port );#if defined(HAVE_IPV6)    else        return ntohs( ((struct sockaddr_in6*) inSockAddr)->sin6_port);#endif    return 0;}// end getPort/* ------------------------------------------------------------------- * Return the IPv4 Internet Address from the sockaddr_in structure * ------------------------------------------------------------------- */struct in_addr* SockAddr_get_in_addr( iperf_sockaddr *inSockAddr ) {    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET )        return &(((struct sockaddr_in*) inSockAddr)->sin_addr);    fprintf(stderr, "FATAL: get_in_addr called on IPv6 address\n");    return NULL;}/* ------------------------------------------------------------------- * Return the IPv6 Internet Address from the sockaddr_in6 structure * ------------------------------------------------------------------- */#ifdef HAVE_IPV6struct in6_addr* SockAddr_get_in6_addr( iperf_sockaddr *inSockAddr ) {    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET6 )        return &(((struct sockaddr_in6*) inSockAddr)->sin6_addr);    fprintf(stderr, "FATAL: get_in6_addr called on IPv4 address\n");    return NULL;}#endif/* ------------------------------------------------------------------- * Return the size of the appropriate address structure. * ------------------------------------------------------------------- */Socklen_t SockAddr_get_sizeof_sockaddr( iperf_sockaddr *inSockAddr ) {#if defined(HAVE_IPV6)    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET6 ) {        return(sizeof(struct sockaddr_in6));    }#endif    return(sizeof(struct sockaddr_in));}// end get_sizeof_sockaddr/* ------------------------------------------------------------------- * Return if IPv6 socket * ------------------------------------------------------------------- */int SockAddr_isIPv6( iperf_sockaddr *inSockAddr ) {#if defined(HAVE_IPV6)    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET6 ) {        return 1;    }#endif    return 0;}// end get_sizeof_sockaddr/* ------------------------------------------------------------------- * Return true if the address is a IPv4 multicast address. * ------------------------------------------------------------------- */int SockAddr_isMulticast( iperf_sockaddr *inSockAddr ) {#if defined(HAVE_IPV6)    if ( ((struct sockaddr*)inSockAddr)->sa_family == AF_INET6 ) {        return( IN6_IS_ADDR_MULTICAST(&(((struct sockaddr_in6*) inSockAddr)->sin6_addr) ));    } else#endif    {        // 224.0.0.0 to 239.255.255.255 (e0.00.00.00 to ef.ff.ff.ff)        const unsigned long kMulticast_Mask = 0xe0000000L;        return(kMulticast_Mask ==               (ntohl( ((struct sockaddr_in*) inSockAddr)->sin_addr.s_addr) & kMulticast_Mask));    }}// end isMulticast/* ------------------------------------------------------------------- * Zero out the address structure. * ------------------------------------------------------------------- */void SockAddr_zeroAddress( iperf_sockaddr *inSockAddr ) {    memset( inSockAddr, 0, sizeof( iperf_sockaddr ));}// zeroAddress/* ------------------------------------------------------------------- * Compare two sockaddrs and return true if they are equal * ------------------------------------------------------------------- */int SockAddr_are_Equal( struct sockaddr* first, struct sockaddr* second ) {    if ( first->sa_family == AF_INET && second->sa_family == AF_INET ) {        // compare IPv4 adresses        return( ((long) ((struct sockaddr_in*)first)->sin_addr.s_addr == (long) ((struct sockaddr_in*)second)->sin_addr.s_addr)                && ( ((struct sockaddr_in*)first)->sin_port == ((struct sockaddr_in*)second)->sin_port) );    }#if defined(HAVE_IPV6)          if ( first->sa_family == AF_INET6 && second->sa_family == AF_INET6 ) {        // compare IPv6 addresses        return( !memcmp(((struct sockaddr_in6*)first)->sin6_addr.s6_addr, ((struct sockaddr_in6*)second)->sin6_addr.s6_addr, sizeof(struct in6_addr))                 && (((struct sockaddr_in6*)first)->sin6_port == ((struct sockaddr_in6*)second)->sin6_port) );    }#endif     return 0;}/* ------------------------------------------------------------------- * Compare two sockaddrs and return true if the hosts are equal * ------------------------------------------------------------------- */int SockAddr_Hostare_Equal( struct sockaddr* first, struct sockaddr* second ) {    if ( first->sa_family == AF_INET && second->sa_family == AF_INET ) {        // compare IPv4 adresses        return( (long) ((struct sockaddr_in*)first)->sin_addr.s_addr ==                 (long) ((struct sockaddr_in*)second)->sin_addr.s_addr);    }#if defined(HAVE_IPV6)          if ( first->sa_family == AF_INET6 && second->sa_family == AF_INET6 ) {        // compare IPv6 addresses        return( !memcmp(((struct sockaddr_in6*)first)->sin6_addr.s6_addr,                         ((struct sockaddr_in6*)second)->sin6_addr.s6_addr, sizeof(struct in6_addr)));    }#endif     return 0;}#ifdef __cplusplus} /* end extern "C" */#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -