in sample_app/onvif_camera_mock/artifacts/wsdd/src/net_utils.c [495:543]
int create_passive_ipv4_socket(struct socket_param_t *socket_param)
{
struct sockaddr_in sin; //for IPv4
int sd;
int on = 1;
memset(&sin, 0, sizeof(struct sockaddr_in));
sin.sin_family = AF_INET;
sin.sin_port = htons(socket_param->port);
sin.sin_addr.s_addr = htonl(INADDR_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_in)) != 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
}