aboutsummaryrefslogtreecommitdiff
path: root/src/daemon/daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon/daemon.c')
-rw-r--r--src/daemon/daemon.c31
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;