aboutsummaryrefslogtreecommitdiff
path: root/src/lib/daemon_start.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/daemon_start.c')
-rw-r--r--src/lib/daemon_start.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/lib/daemon_start.c b/src/lib/daemon_start.c
index 51c48a28..5ed6d29d 100644
--- a/src/lib/daemon_start.c
+++ b/src/lib/daemon_start.c
@@ -177,11 +177,12 @@ static enum MHD_StatusCode
177open_listen_socket (struct MHD_Daemon *daemon) 177open_listen_socket (struct MHD_Daemon *daemon)
178{ 178{
179 enum MHD_StatusCode sc; 179 enum MHD_StatusCode sc;
180 bool usev6;
181 socklen_t addrlen; 180 socklen_t addrlen;
182 struct sockaddr_storage ss; 181 struct sockaddr_storage ss;
183 const struct sockaddr *sa; 182 const struct sockaddr *sa;
184 183 int pf;
184 bool use_v6;
185
185 if (MHD_INVALID_SOCKET != daemon->listen_fd) 186 if (MHD_INVALID_SOCKET != daemon->listen_fd)
186 return MHD_SC_OK; /* application opened it for us! */ 187 return MHD_SC_OK; /* application opened it for us! */
187 188
@@ -194,17 +195,21 @@ open_listen_socket (struct MHD_Daemon *daemon)
194 abort (); 195 abort ();
195 case MHD_AF_AUTO: 196 case MHD_AF_AUTO:
196#if HAVE_INET6 197#if HAVE_INET6
198 pf = PF_INET6;
197 use_v6 = true; 199 use_v6 = true;
198#else 200#else
201 pf = PF_INET;
199 use_v6 = false; 202 use_v6 = false;
200#endif 203#endif
201 break; 204 break;
202 case MHD_AF_INET: 205 case MHD_AF_INET:
203 use_v6 = false; 206 use_v6 = false;
207 pf = PF_INET;
204 break; 208 break;
205 case MHD_AF_INET6: 209 case MHD_AF_INET6:
206 case MHD_AF_DUAL: 210 case MHD_AF_DUAL:
207#if HAVE_INET6 211#if HAVE_INET6
212 pf = PF_INET6;
208 use_v6 = true; 213 use_v6 = true;
209 break; 214 break;
210#else 215#else
@@ -219,21 +224,24 @@ open_listen_socket (struct MHD_Daemon *daemon)
219 } 224 }
220 else if (0 != daemon->listen_sa_len) 225 else if (0 != daemon->listen_sa_len)
221 { 226 {
227
222 /* we have a listen address, get AF from there! */ 228 /* we have a listen address, get AF from there! */
223 switch (daemon->listen_sa.ss_family) 229 switch (daemon->listen_sa.ss_family)
224 { 230 {
225 case AF_INET: 231 case AF_INET:
232 pf = PF_INET;
226 use_v6 = false; 233 use_v6 = false;
227 break; 234 break;
228#ifdef AF_INET6 235#ifdef AF_INET6
229 case AF_INET6: 236 case AF_INET6:
237 pf = PF_INET6;
230 use_v6 = true; 238 use_v6 = true;
231 break; 239 break;
232#endif 240#endif
233#ifdef AF_UNIX 241#ifdef AF_UNIX
234 case AF_UNIX: 242 case AF_UNIX:
235 // FIXME: not implemented 243 pf = PF_UNIX;
236 // (need to change MHD_socket_create_listen_() API!) 244 use_v6 = false;
237#endif 245#endif
238 default: 246 default:
239 return MHD_SC_AF_NOT_SUPPORTED_BY_BUILD; 247 return MHD_SC_AF_NOT_SUPPORTED_BY_BUILD;
@@ -247,12 +255,13 @@ open_listen_socket (struct MHD_Daemon *daemon)
247 255
248 /* try to open listen socket */ 256 /* try to open listen socket */
249 try_open_listen_socket: 257 try_open_listen_socket:
250 daemon->listen_socket = MHD_socket_create_listen_(use_v6); 258 daemon->listen_socket = MHD_socket_create_listen_(pf);
251 if ( (MHD_INVALID_SOCKET == daemon->listen_socket) && 259 if ( (MHD_INVALID_SOCKET == daemon->listen_socket) &&
252 (MHD_AF_AUTO == daemon->address_family) && 260 (MHD_AF_AUTO == daemon->address_family) &&
253 (use_v6) ) 261 (use_v6) )
254 { 262 {
255 use_v6 = false; 263 use_v6 = false;
264 pf = PF_INET;
256 goto try_open_listen_socket; 265 goto try_open_listen_socket;
257 } 266 }
258 if (MHD_INVALID_SOCKET == daemon->listen_socket) 267 if (MHD_INVALID_SOCKET == daemon->listen_socket)