in sample_app/onvif_camera_mock/artifacts/wsdd/src/net_utils.c [556:606]
int create_passive_ipv6_socket(struct socket_param_t *socket_param)
{
struct sockaddr_in6 sin; //for IPv6
int sd;
int on = 1;
memset(&sin, 0, sizeof(struct sockaddr_in6));
sin.sin6_family = AF_INET6;
sin.sin6_flowinfo = 0;
sin.sin6_port = htons(socket_param->port);
sin.sin6_addr = in6addr_any;
sd = socket(socket_param->domain, socket_param->type, socket_param->protocol);
if( sd == -1 )
return -1;
//small hack that win error «Address already in use»
if( setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0 )
{
close(sd);
return -1;
}
if( bind(sd, (struct sockaddr *)&sin, sizeof(struct sockaddr_in6)) != 0 )
{
close(sd);
return -1;
}
if( (socket_param->type == SOCK_STREAM) && listen(sd, socket_param->queue_len) )
{
close(sd);
return -1;
}
if( socket_param->non_block && set_nonblock_mode(sd) )
{
close(sd);
return -1; //can't set non_block mode
}
return sd; //good job
}