int connect_to_ipv6_socket()

in sample_app/onvif_camera_mock/artifacts/wsdd/src/net_utils.c [413:455]


int connect_to_ipv6_socket(struct socket_param_t *socket_param)
{

    struct sockaddr_in6  sin;   //for IPv6
    int sd, ret;


    memset(&sin, 0, sizeof(struct sockaddr_in6));
    sin.sin6_family = AF_INET6;
    sin.sin6_port   = htons(socket_param->port);


    ret = host_or_ip_to_addr(socket_param->host_or_IP, socket_param->domain, &sin.sin6_addr);
    if( ret != 0 )
        return -1;     //Can't get addr from host or IP


    sd = socket(socket_param->domain, socket_param->type, socket_param->protocol);
    if( sd == -1 )
        return -1;


    if( socket_param->non_block && set_nonblock_mode(sd) )
    {
        close(sd);
        return -1;  //can't set non_block mode
    }


    if( socket_param->type == SOCK_DGRAM )
        return sd; //good job


    ret = connect(sd, (struct sockaddr *)&sin, sizeof(struct sockaddr_in6));
    if( ret &&  wait_connect(sd, 2000) )
    {
        close(sd);
        return -1;  //can't connect to socket
    }


    return sd; //good job
}