LWIP ipv6 dns示例

int httpclient_conn(httpclient_t *client, char *host)

{

    struct addrinfo hints, *addr_list, *cur;

    struct timeval timeout;

    int ret = 0;

    char port[10] = {0};

         struct sockaddr_in6 *sin;

    memset( &hints, 0, sizeof( hints ) );

    hints.ai_family = AF_UNSPEC;

    hints.ai_socktype = SOCK_STREAM;

    hints.ai_protocol = IPPROTO_TCP;

    cm_printf("start conn\n");

    timeout.tv_sec  = client->timeout_in_sec > HTTPCLIENT_MAX_SOC_TIMEOUT ? HTTPCLIENT_MAX_SOC_TIMEOUT : client->timeout_in_sec;

    timeout.tv_usec = 0;

    snprintf(port, sizeof(port), "%d", client->remote_port) ;

    if ( getaddrinfo( host, port , &hints, &addr_list ) != 0 ) {

        DBG("getaddrinfo != 0, return HTTPCLIENT_UNRESOLVED_DNS");

        cm_printf("unresolve dns\n");

        return HTTPCLIENT_UNRESOLVED_DNS;

    }

    /* Try the sockaddrs until a connection succeeds */

    ret = HTTPCLIENT_UNRESOLVED_DNS;

    for ( cur = addr_list; cur != NULL; cur = cur->ai_next ) {

     

       client->socket = (int) socket( cur->ai_family, cur->ai_socktype,

                                        cur->ai_protocol );

        if ( client->socket < 0 ) {

            ret = HTTPCLIENT_ERROR_CONN;

            continue;

        }

        /* set timeout if user need */

        if ( client->timeout_in_sec > 0) {

            lwip_setsockopt(client->socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));

            lwip_setsockopt(client->socket, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));

        }

        if ( connect( client->socket, cur->ai_addr, (int)cur->ai_addrlen ) == 0 ) {

            ret = 0;

            sin = (struct sockaddr_in *)cur->ai_addr;

            cm_printf("addr:%s\n",inet6_ntoa(sin->sin6_addr));

            break;

        }

        close( client->socket );

        ret = HTTPCLIENT_ERROR_CONN;

    }

    freeaddrinfo( addr_list );

    return ret;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值