@@ -53,7 +53,7 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
53
53
#else
54
54
ngx_uint_t i ;
55
55
#endif
56
- ngx_stream_listen_t * ls , * als ;
56
+ ngx_stream_listen_opt_t * ls , * als ;
57
57
58
58
mrb_get_args (mrb , "H" , & listener );
59
59
address = mrb_hash_get (mrb , listener , mrb_check_intern_cstr (mrb , "address" ));
@@ -76,13 +76,19 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
76
76
77
77
cmcf = ngx_stream_conf_get_module_main_conf (cf , ngx_stream_core_module );
78
78
79
- ls = ngx_array_push (& cmcf -> listen );
79
+ if (cmcf -> ports == NULL ) {
80
+ cmcf -> ports = ngx_array_create (cf -> pool , 4 , sizeof (ngx_stream_listen_opt_t ));
81
+ if (cmcf -> ports == NULL ) {
82
+ mrb_raise (mrb , E_RUNTIME_ERROR , "Failed to create cmcf->ports array" );
83
+ }
84
+ }
85
+
86
+ ls = ngx_array_push (cmcf -> ports );
80
87
if (ls == NULL ) {
81
88
mrb_raise (mrb , E_RUNTIME_ERROR , "ngx_stream_mrb_add_listener ngx_array_push failed" );
82
89
}
83
90
84
- ngx_memzero (ls , sizeof (ngx_stream_listen_t ));
85
-
91
+ ngx_memzero (ls , sizeof (ngx_stream_listen_opt_t ));
86
92
#if (nginx_version < 1015010 )
87
93
ngx_memcpy (& ls -> sockaddr .sockaddr , & u .sockaddr , u .socklen );
88
94
ls -> socklen = u .socklen ;
@@ -96,7 +102,6 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
96
102
#endif
97
103
ls -> type = SOCK_STREAM ;
98
104
ls -> wildcard = u .wildcard ;
99
- ls -> ctx = cf -> ctx ;
100
105
101
106
#if (NGX_HAVE_INET6 )
102
107
ls -> ipv6only = 1 ;
@@ -124,24 +129,24 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
124
129
}
125
130
}
126
131
127
- als = cmcf -> listen . elts ;
132
+ als = cmcf -> ports -> elts ;
128
133
129
134
#if (nginx_version > 1015009 )
130
135
for (n = 0 ; n < u .naddrs ; n ++ ) {
131
- ls [n ] = ls [0 ];
132
- ls [n ].sockaddr = u .addrs [n ].sockaddr ;
133
- ls [n ].socklen = u .addrs [n ].socklen ;
134
- ls [n ].addr_text = u .addrs [n ].name ;
135
- ls [n ].wildcard = ngx_inet_wildcard (ls [n ].sockaddr );
136
-
137
- for (i = 0 ; i < cmcf -> listen .nelts - u .naddrs + n ; i ++ ) {
138
- if (ls [n ].type != als [i ].type ) {
139
- continue ;
140
- }
141
-
142
- if (ngx_cmp_sockaddr (als [i ].sockaddr , als [i ].socklen , ls [n ].sockaddr , ls [n ].socklen , 1 ) != NGX_OK ) {
136
+ ls [n ] = ls [0 ];
137
+ ls [n ].sockaddr = u .addrs [n ].sockaddr ;
138
+ ls [n ].socklen = u .addrs [n ].socklen ;
139
+ ls [n ].addr_text = u .addrs [n ].name ;
140
+ ls [n ].wildcard = ngx_inet_wildcard (ls [n ].sockaddr );
141
+
142
+ for (i = 0 ; i < cmcf -> ports -> nelts - u .naddrs + n ; i ++ ) {
143
+ if (ls [n ].type != als [i ].type ) {
143
144
continue ;
144
- }
145
+ }
146
+
147
+ if (ngx_cmp_sockaddr (als [i ].sockaddr , als [i ].socklen , ls [n ].sockaddr , ls [n ].socklen , 1 ) != NGX_OK ) {
148
+ continue ;
149
+ }
145
150
146
151
ngx_conf_log_error (NGX_LOG_EMERG , cf , 0 , "duplicate \"%V\" address and port pair" , & ls [n ].addr_text );
147
152
mrb_raise (mrb , E_RUNTIME_ERROR , "duplicate address and port pair" );
0 commit comments