[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r7697 - libmicrohttpd/src/daemon
From: |
gnunet |
Subject: |
[GNUnet-SVN] r7697 - libmicrohttpd/src/daemon |
Date: |
Thu, 11 Sep 2008 17:20:37 -0600 (MDT) |
Author: lv-426
Date: 2008-09-11 17:20:37 -0600 (Thu, 11 Sep 2008)
New Revision: 7697
Modified:
libmicrohttpd/src/daemon/daemon.c
Log:
partial fix to bad smell [long func] in MHD_start_daemon
Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c 2008-09-11 21:59:33 UTC (rev 7696)
+++ libmicrohttpd/src/daemon/daemon.c 2008-09-11 23:20:37 UTC (rev 7697)
@@ -818,6 +818,83 @@
}
/**
+ * Bind daemon to socket
+ *
+ * @param options passed to the daemon
+ * @param port for the daemon to bind to
+ * @param servaddr: optional user initialized servaddr to bind to
+ * @param daemon
+ * @return 0 upon sucess or -1 on error
+ */
+static int bind_to_socket(unsigned int options,
+ unsigned short port,
+ const struct sockaddr * servaddr, struct MHD_Daemon * daemon ){
+ int socket_fd;
+ const int on = 1;
+ struct sockaddr_in servaddr4;
+ struct sockaddr_in6 servaddr6;
+ socklen_t addrlen;
+
+ if ((options & MHD_USE_IPv6) != 0)
+ socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0);
+ else
+ socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0);
+ if (socket_fd < 0)
+ {
+ #if HAVE_MESSAGES
+ if ((options & MHD_USE_DEBUG) != 0)
+ FPRINTF (stderr, "Call to socket failed: %s\n", STRERROR
(errno));
+ #endif
+ return -1;
+ }
+ if ((SETSOCKOPT (socket_fd,
+ SOL_SOCKET,
+ SO_REUSEADDR,
+ &on, sizeof (on)) < 0) && (options & MHD_USE_DEBUG)
!= 0)
+ {
+ #if HAVE_MESSAGES
+ FPRINTF (stderr, "setsockopt failed: %s\n", STRERROR (errno));
+ #endif
+ }
+
+ /* check for user supplied sockaddr */
+ if ((options & MHD_USE_IPv6) != 0)
+ addrlen = sizeof (struct sockaddr_in6);
+ else
+ addrlen = sizeof (struct sockaddr_in);
+ if (NULL == servaddr)
+ {
+ if ((options & MHD_USE_IPv6) != 0)
+ {
+ memset (&servaddr6, 0, sizeof (struct sockaddr_in6));
+ servaddr6.sin6_family = AF_INET6;
+ servaddr6.sin6_port = htons (port);
+ servaddr = (struct sockaddr *) &servaddr6;
+ }
+ else
+ {
+ memset (&servaddr4, 0, sizeof (struct sockaddr_in));
+ servaddr4.sin_family = AF_INET;
+ servaddr4.sin_port = htons (port);
+ servaddr = (struct sockaddr *) &servaddr4;
+ }
+ }
+
+ if (BIND (socket_fd, servaddr, addrlen) < 0)
+ {
+ #if HAVE_MESSAGES
+ if ((options & MHD_USE_DEBUG) != 0)
+ FPRINTF (stderr,
+ "Failed to bind to port %u: %s\n", port, STRERROR
(errno));
+ #endif
+ CLOSE (socket_fd);
+ return -1;
+ }
+ daemon->socket_fd = socket_fd;
+ return 0;
+}
+
+/**
* Start a webserver on the given port.
*
* @param port port to bind to
@@ -862,13 +939,8 @@
void *apc_cls,
MHD_AccessHandlerCallback dh, void *dh_cls, va_list ap)
{
- const int on = 1;
+ const struct sockaddr * servaddr = NULL;
struct MHD_Daemon *retVal;
- int socket_fd;
- struct sockaddr_in servaddr4;
- struct sockaddr_in6 servaddr6;
- const struct sockaddr *servaddr = NULL;
- socklen_t addrlen;
enum MHD_OPTION opt;
if ((port == 0) || (dh == NULL))
@@ -976,73 +1048,19 @@
}
}
- if ((options & MHD_USE_IPv6) != 0)
- socket_fd = SOCKET (PF_INET6, SOCK_STREAM, 0);
- else
- socket_fd = SOCKET (PF_INET, SOCK_STREAM, 0);
- if (socket_fd < 0)
- {
-#if HAVE_MESSAGES
- if ((options & MHD_USE_DEBUG) != 0)
- FPRINTF (stderr, "Call to socket failed: %s\n", STRERROR (errno));
-#endif
- free (retVal);
- return NULL;
- }
- if ((SETSOCKOPT (socket_fd,
- SOL_SOCKET,
- SO_REUSEADDR,
- &on, sizeof (on)) < 0) && (options & MHD_USE_DEBUG) != 0)
- {
-#if HAVE_MESSAGES
- FPRINTF (stderr, "setsockopt failed: %s\n", STRERROR (errno));
-#endif
- }
+ if (bind_to_socket(options, port, servaddr, retVal)){;
+ free (retVal);
+ return NULL;
+ }
- /* check for user supplied sockaddr */
- if ((options & MHD_USE_IPv6) != 0)
- addrlen = sizeof (struct sockaddr_in6);
- else
- addrlen = sizeof (struct sockaddr_in);
- if (NULL == servaddr)
+ if (LISTEN (retVal->socket_fd, 20) < 0)
{
- if ((options & MHD_USE_IPv6) != 0)
- {
- memset (&servaddr6, 0, sizeof (struct sockaddr_in6));
- servaddr6.sin6_family = AF_INET6;
- servaddr6.sin6_port = htons (port);
- servaddr = (struct sockaddr *) &servaddr6;
- }
- else
- {
- memset (&servaddr4, 0, sizeof (struct sockaddr_in));
- servaddr4.sin_family = AF_INET;
- servaddr4.sin_port = htons (port);
- servaddr = (struct sockaddr *) &servaddr4;
- }
- }
- retVal->socket_fd = socket_fd;
- if (BIND (socket_fd, servaddr, addrlen) < 0)
- {
#if HAVE_MESSAGES
if ((options & MHD_USE_DEBUG) != 0)
FPRINTF (stderr,
- "Failed to bind to port %u: %s\n", port, STRERROR (errno));
-#endif
- CLOSE (socket_fd);
- free (retVal);
- return NULL;
- }
-
-
- if (LISTEN (socket_fd, 20) < 0)
- {
-#if HAVE_MESSAGES
- if ((options & MHD_USE_DEBUG) != 0)
- FPRINTF (stderr,
"Failed to listen for connections: %s\n", STRERROR (errno));
#endif
- CLOSE (socket_fd);
+ CLOSE (retVal->socket_fd);
free (retVal);
return NULL;
}
@@ -1055,7 +1073,7 @@
#if HAVE_MESSAGES
MHD_DLOG (retVal, "Failed to initialize TLS support\n");
#endif
- CLOSE (socket_fd);
+ CLOSE (retVal->socket_fd);
free (retVal);
return NULL;
}
@@ -1070,7 +1088,7 @@
"Failed to create listen thread: %s\n", STRERROR (errno));
#endif
free (retVal);
- CLOSE (socket_fd);
+ CLOSE (retVal->socket_fd);
return NULL;
}
return retVal;
@@ -1096,7 +1114,7 @@
#endif
#endif
CLOSE (fd);
- if ((0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) ||
+ if ((0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) ||
(0 != (daemon->options & MHD_USE_SELECT_INTERNALLY)))
{
pthread_kill (daemon->pid, SIGALRM);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7697 - libmicrohttpd/src/daemon,
gnunet <=