@@ -41,7 +41,6 @@ static mrb_value ngx_stream_mrb_get_ngx_mruby_name(mrb_state *mrb, mrb_value sel
41
41
42
42
static mrb_value ngx_stream_mrb_add_listener (mrb_state * mrb , mrb_value self )
43
43
{
44
- ngx_stream_core_main_conf_t * cmcf ;
45
44
ngx_stream_mruby_srv_conf_t * mscf = mrb -> ud ;
46
45
ngx_stream_core_srv_conf_t * cscf = mscf -> ctx -> cscf ;
47
46
ngx_conf_t * cf = mscf -> ctx -> cf ;
@@ -53,7 +52,7 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
53
52
#else
54
53
ngx_uint_t i ;
55
54
#endif
56
- ngx_stream_listen_t * ls , * als ;
55
+ ngx_stream_listen_opt_t ls ;
57
56
58
57
mrb_get_args (mrb , "H" , & listener );
59
58
address = mrb_hash_get (mrb , listener , mrb_check_intern_cstr (mrb , "address" ));
@@ -74,93 +73,57 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
74
73
mrb_raise (mrb , E_RUNTIME_ERROR , "ngx_stream_mrb_add_listener ngx_parse_url failed" );
75
74
}
76
75
77
- cmcf = ngx_stream_conf_get_module_main_conf (cf , ngx_stream_core_module );
78
-
79
- ls = ngx_array_push (& cmcf -> listen );
80
- if (ls == NULL ) {
81
- mrb_raise (mrb , E_RUNTIME_ERROR , "ngx_stream_mrb_add_listener ngx_array_push failed" );
82
- }
83
-
84
- ngx_memzero (ls , sizeof (ngx_stream_listen_t ));
85
-
86
- #if (nginx_version < 1015010 )
87
- ngx_memcpy (& ls -> sockaddr .sockaddr , & u .sockaddr , u .socklen );
88
- ls -> socklen = u .socklen ;
89
- #endif
90
-
91
- ls -> backlog = NGX_LISTEN_BACKLOG ;
92
-
93
- #if (nginx_version >= 1013000 )
94
- ls -> rcvbuf = -1 ;
95
- ls -> sndbuf = -1 ;
96
- #endif
97
- ls -> type = SOCK_STREAM ;
98
- ls -> wildcard = u .wildcard ;
99
- ls -> ctx = cf -> ctx ;
76
+ ngx_memzero (& ls , sizeof (ngx_stream_listen_opt_t ));
77
+ ls .rcvbuf = -1 ;
78
+ ls .sndbuf = -1 ;
79
+ ls .type = SOCK_STREAM ;
80
+ ls .wildcard = u .wildcard ;
100
81
101
82
#if (NGX_HAVE_INET6 )
102
- ls -> ipv6only = 1 ;
83
+ ls . ipv6only = 1 ;
103
84
#endif
104
85
105
86
#if !(NGX_WIN32 )
106
87
if (mrb_bool (mrb_hash_get (mrb , listener , mrb_check_intern_cstr (mrb , "udp" )))) {
107
- ls -> type = SOCK_DGRAM ;
88
+ ls . type = SOCK_DGRAM ;
108
89
}
109
90
#endif
110
91
111
- if (ls -> type == SOCK_DGRAM ) {
92
+ if (ls . type == SOCK_DGRAM ) {
112
93
#if (NGX_STREAM_SSL )
113
- if (ls -> ssl ) {
94
+ if (ls . ssl ) {
114
95
mrb_raise (mrb , E_RUNTIME_ERROR , "\"ssl\" parameter is incompatible with \"udp\"" );
115
96
}
116
97
#endif
117
98
118
- if (ls -> so_keepalive ) {
99
+ if (ls . so_keepalive ) {
119
100
mrb_raise (mrb , E_RUNTIME_ERROR , "\"so_keepalive\" parameter is incompatible with \"udp\"" );
120
101
}
121
102
122
- if (ls -> proxy_protocol ) {
103
+ if (ls . proxy_protocol ) {
123
104
mrb_raise (mrb , E_RUNTIME_ERROR , "\"proxy_protocol\" parameter is incompatible with \"udp\"" );
124
105
}
125
106
}
126
107
127
- als = cmcf -> listen .elts ;
128
-
129
- #if (nginx_version > 1015009 )
130
108
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 ) {
143
- continue ;
144
- }
145
-
146
- ngx_conf_log_error (NGX_LOG_EMERG , cf , 0 , "duplicate \"%V\" address and port pair" , & ls [n ].addr_text );
147
- mrb_raise (mrb , E_RUNTIME_ERROR , "duplicate address and port pair" );
148
- }
149
- }
150
- #else
151
- for (i = 0 ; i < cmcf -> listen .nelts - 1 ; i ++ ) {
152
- if (ls -> type != als [i ].type ) {
109
+ for (i = 0 ; i < n ; i ++ ) {
110
+ if (ngx_cmp_sockaddr (u .addrs [n ].sockaddr , u .addrs [n ].socklen , u .addrs [i ].sockaddr , u .addrs [i ].socklen , 1 ) ==
111
+ NGX_OK ) {
112
+ goto next ;
113
+ }
114
+ next :
153
115
continue ;
154
116
}
155
117
156
- if (ngx_cmp_sockaddr (& als [i ].sockaddr .sockaddr , als [i ].socklen , & ls -> sockaddr .sockaddr , ls -> socklen , 1 ) != NGX_OK ) {
157
- continue ;
158
- }
118
+ ls .sockaddr = u .addrs [n ].sockaddr ;
119
+ ls .socklen = u .addrs [n ].socklen ;
120
+ ls .addr_text = u .addrs [n ].name ;
121
+ ls .wildcard = ngx_inet_wildcard (ls .sockaddr );
159
122
160
- ngx_conf_log_error (NGX_LOG_EMERG , cf , 0 , "duplicate \"%V\" address and port pair" , & u .url );
161
- mrb_raise (mrb , E_RUNTIME_ERROR , "duplicate address and port pair" );
123
+ if (ngx_stream_add_listen (cf , cscf , & ls ) != NGX_OK ) {
124
+ mrb_raise (mrb , E_RUNTIME_ERROR , "can't add strem listener" );
125
+ }
162
126
}
163
- #endif
164
127
165
128
return mrb_true_value ();
166
129
}
0 commit comments