Mercurial > hg > nginx
comparison src/stream/ngx_stream_core_module.c @ 9060:91ad1abfb285 quic
Merged with the default branch.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 15 Dec 2022 19:40:44 +0400 |
parents | 630ecd703805 4cc2bfeff46c |
children | af5adec171b4 |
comparison
equal
deleted
inserted
replaced
9059:b87a0dbc1150 | 9060:91ad1abfb285 |
---|---|
576 ngx_stream_core_srv_conf_t *cscf = conf; | 576 ngx_stream_core_srv_conf_t *cscf = conf; |
577 | 577 |
578 ngx_str_t *value, size; | 578 ngx_str_t *value, size; |
579 ngx_url_t u; | 579 ngx_url_t u; |
580 ngx_uint_t i, n, backlog; | 580 ngx_uint_t i, n, backlog; |
581 ngx_stream_listen_t *ls, *als; | 581 ngx_stream_listen_t *ls, *als, *nls; |
582 ngx_stream_core_main_conf_t *cmcf; | 582 ngx_stream_core_main_conf_t *cmcf; |
583 | 583 |
584 cscf->listen = 1; | 584 cscf->listen = 1; |
585 | 585 |
586 value = cf->args->elts; | 586 value = cf->args->elts; |
600 return NGX_CONF_ERROR; | 600 return NGX_CONF_ERROR; |
601 } | 601 } |
602 | 602 |
603 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); | 603 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); |
604 | 604 |
605 ls = ngx_array_push_n(&cmcf->listen, u.naddrs); | 605 ls = ngx_array_push(&cmcf->listen); |
606 if (ls == NULL) { | 606 if (ls == NULL) { |
607 return NGX_CONF_ERROR; | 607 return NGX_CONF_ERROR; |
608 } | 608 } |
609 | 609 |
610 ngx_memzero(ls, sizeof(ngx_stream_listen_t)); | 610 ngx_memzero(ls, sizeof(ngx_stream_listen_t)); |
913 return "\"fastopen\" parameter is incompatible with \"udp\""; | 913 return "\"fastopen\" parameter is incompatible with \"udp\""; |
914 } | 914 } |
915 #endif | 915 #endif |
916 } | 916 } |
917 | 917 |
918 als = cmcf->listen.elts; | |
919 | |
920 for (n = 0; n < u.naddrs; n++) { | 918 for (n = 0; n < u.naddrs; n++) { |
921 ls[n] = ls[0]; | 919 |
922 | 920 for (i = 0; i < n; i++) { |
923 ls[n].sockaddr = u.addrs[n].sockaddr; | 921 if (ngx_cmp_sockaddr(u.addrs[n].sockaddr, u.addrs[n].socklen, |
924 ls[n].socklen = u.addrs[n].socklen; | 922 u.addrs[i].sockaddr, u.addrs[i].socklen, 0) |
925 ls[n].addr_text = u.addrs[n].name; | 923 == NGX_OK) |
926 ls[n].wildcard = ngx_inet_wildcard(ls[n].sockaddr); | 924 { |
927 | 925 goto next; |
928 for (i = 0; i < cmcf->listen.nelts - u.naddrs + n; i++) { | 926 } |
929 if (ls[n].type != als[i].type) { | 927 } |
928 | |
929 if (n != 0) { | |
930 nls = ngx_array_push(&cmcf->listen); | |
931 if (nls == NULL) { | |
932 return NGX_CONF_ERROR; | |
933 } | |
934 | |
935 *nls = *ls; | |
936 | |
937 } else { | |
938 nls = ls; | |
939 } | |
940 | |
941 nls->sockaddr = u.addrs[n].sockaddr; | |
942 nls->socklen = u.addrs[n].socklen; | |
943 nls->addr_text = u.addrs[n].name; | |
944 nls->wildcard = ngx_inet_wildcard(nls->sockaddr); | |
945 | |
946 als = cmcf->listen.elts; | |
947 | |
948 for (i = 0; i < cmcf->listen.nelts - 1; i++) { | |
949 if (nls->type != als[i].type) { | |
930 continue; | 950 continue; |
931 } | 951 } |
932 | 952 |
933 if (ngx_cmp_sockaddr(als[i].sockaddr, als[i].socklen, | 953 if (ngx_cmp_sockaddr(als[i].sockaddr, als[i].socklen, |
934 ls[n].sockaddr, ls[n].socklen, 1) | 954 nls->sockaddr, nls->socklen, 1) |
935 != NGX_OK) | 955 != NGX_OK) |
936 { | 956 { |
937 continue; | 957 continue; |
938 } | 958 } |
939 | 959 |
940 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | 960 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
941 "duplicate \"%V\" address and port pair", | 961 "duplicate \"%V\" address and port pair", |
942 &ls[n].addr_text); | 962 &nls->addr_text); |
943 return NGX_CONF_ERROR; | 963 return NGX_CONF_ERROR; |
944 } | 964 } |
965 | |
966 next: | |
967 continue; | |
945 } | 968 } |
946 | 969 |
947 return NGX_CONF_OK; | 970 return NGX_CONF_OK; |
948 } | 971 } |
949 | 972 |