diff options
Diffstat (limited to 'src/daemon/daemon.c')
-rw-r--r-- | src/daemon/daemon.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c index 88e37c8c..7ff93ca0 100644 --- a/src/daemon/daemon.c +++ b/src/daemon/daemon.c | |||
@@ -341,8 +341,12 @@ MHD_accept_connection (struct MHD_Daemon *daemon) | |||
341 | { | 341 | { |
342 | struct MHD_Connection *pos; | 342 | struct MHD_Connection *pos; |
343 | struct MHD_Connection *connection; | 343 | struct MHD_Connection *connection; |
344 | struct sockaddr_in6 addr6; | 344 | #if HAVE_INET6 |
345 | struct sockaddr *addr = (struct sockaddr *) &addr6; | 345 | struct sockaddr_in6 addrstorage; |
346 | #else | ||
347 | struct sockaddr_in addrstorage; | ||
348 | #endif | ||
349 | struct sockaddr *addr = (struct sockaddr *) &addrstorage; | ||
346 | socklen_t addrlen; | 350 | socklen_t addrlen; |
347 | unsigned int have; | 351 | unsigned int have; |
348 | int s, res_thread_create; | 352 | int s, res_thread_create; |
@@ -350,10 +354,12 @@ MHD_accept_connection (struct MHD_Daemon *daemon) | |||
350 | static int on = 1; | 354 | static int on = 1; |
351 | #endif | 355 | #endif |
352 | 356 | ||
357 | #if HAVE_INET6 | ||
353 | if (sizeof (struct sockaddr) > sizeof (struct sockaddr_in6)) | 358 | if (sizeof (struct sockaddr) > sizeof (struct sockaddr_in6)) |
354 | abort (); /* fatal, serious error */ | 359 | abort (); /* fatal, serious error */ |
355 | addrlen = sizeof (struct sockaddr_in6); | 360 | #endif |
356 | memset (addr, 0, sizeof (struct sockaddr_in6)); | 361 | addrlen = sizeof (addrstorage); |
362 | memset (addr, 0, sizeof (addrstorage)); | ||
357 | 363 | ||
358 | s = ACCEPT (daemon->socket_fd, addr, &addrlen); | 364 | s = ACCEPT (daemon->socket_fd, addr, &addrlen); |
359 | 365 | ||
@@ -393,6 +399,7 @@ MHD_accept_connection (struct MHD_Daemon *daemon) | |||
393 | sizeof (struct in_addr))) | 399 | sizeof (struct in_addr))) |
394 | have++; | 400 | have++; |
395 | } | 401 | } |
402 | #if HAVE_INET6 | ||
396 | if (addrlen == sizeof (struct sockaddr_in6)) | 403 | if (addrlen == sizeof (struct sockaddr_in6)) |
397 | { | 404 | { |
398 | const struct sockaddr_in6 *a1 = | 405 | const struct sockaddr_in6 *a1 = |
@@ -403,6 +410,7 @@ MHD_accept_connection (struct MHD_Daemon *daemon) | |||
403 | sizeof (struct in6_addr))) | 410 | sizeof (struct in6_addr))) |
404 | have++; | 411 | have++; |
405 | } | 412 | } |
413 | #endif | ||
406 | } | 414 | } |
407 | pos = pos->next; | 415 | pos = pos->next; |
408 | } | 416 | } |
@@ -826,7 +834,9 @@ MHD_start_daemon_va (unsigned int options, | |||
826 | struct MHD_Daemon *retVal; | 834 | struct MHD_Daemon *retVal; |
827 | int socket_fd; | 835 | int socket_fd; |
828 | struct sockaddr_in servaddr4; | 836 | struct sockaddr_in servaddr4; |
837 | #if HAVE_INET6 | ||
829 | struct sockaddr_in6 servaddr6; | 838 | struct sockaddr_in6 servaddr6; |
839 | #endif | ||
830 | const struct sockaddr *servaddr = NULL; | 840 | const struct sockaddr *servaddr = NULL; |
831 | socklen_t addrlen; | 841 | socklen_t addrlen; |
832 | enum MHD_OPTION opt; | 842 | enum MHD_OPTION opt; |
@@ -931,7 +941,16 @@ MHD_start_daemon_va (unsigned int options, | |||
931 | } | 941 | } |
932 | 942 | ||
933 | if ((options & MHD_USE_IPv6) != 0) | 943 | if ((options & MHD_USE_IPv6) != 0) |
944 | #if HAVE_INET6 | ||
934 | socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0); | 945 | socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0); |
946 | #else | ||
947 | { | ||
948 | #if HAVE_MESSAGES | ||
949 | FPRINTF (stderr, "AF_INET6 not supported\n"); | ||
950 | #endif | ||
951 | return NULL; | ||
952 | } | ||
953 | #endif | ||
935 | else | 954 | else |
936 | socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0); | 955 | socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0); |
937 | if (socket_fd < 0) | 956 | if (socket_fd < 0) |
@@ -954,12 +973,15 @@ MHD_start_daemon_va (unsigned int options, | |||
954 | } | 973 | } |
955 | 974 | ||
956 | /* check for user supplied sockaddr */ | 975 | /* check for user supplied sockaddr */ |
976 | #if HAVE_INET6 | ||
957 | if ((options & MHD_USE_IPv6) != 0) | 977 | if ((options & MHD_USE_IPv6) != 0) |
958 | addrlen = sizeof (struct sockaddr_in6); | 978 | addrlen = sizeof (struct sockaddr_in6); |
959 | else | 979 | else |
980 | #endif | ||
960 | addrlen = sizeof (struct sockaddr_in); | 981 | addrlen = sizeof (struct sockaddr_in); |
961 | if (NULL == servaddr) | 982 | if (NULL == servaddr) |
962 | { | 983 | { |
984 | #if HAVE_INET6 | ||
963 | if ((options & MHD_USE_IPv6) != 0) | 985 | if ((options & MHD_USE_IPv6) != 0) |
964 | { | 986 | { |
965 | memset (&servaddr6, 0, sizeof (struct sockaddr_in6)); | 987 | memset (&servaddr6, 0, sizeof (struct sockaddr_in6)); |
@@ -968,6 +990,7 @@ MHD_start_daemon_va (unsigned int options, | |||
968 | servaddr = (struct sockaddr *) &servaddr6; | 990 | servaddr = (struct sockaddr *) &servaddr6; |
969 | } | 991 | } |
970 | else | 992 | else |
993 | #endif | ||
971 | { | 994 | { |
972 | memset (&servaddr4, 0, sizeof (struct sockaddr_in)); | 995 | memset (&servaddr4, 0, sizeof (struct sockaddr_in)); |
973 | servaddr4.sin_family = AF_INET; | 996 | servaddr4.sin_family = AF_INET; |