int create_passive_ipv4_socket()

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
}