stream: add backlog option to stream services, forward to listen()
authorMartin Willi <martin@revosec.ch>
Fri, 28 Jun 2013 08:20:13 +0000 (10:20 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 18 Jul 2013 14:00:28 +0000 (16:00 +0200)
src/libstrongswan/networking/streams/stream_manager.c
src/libstrongswan/networking/streams/stream_manager.h
src/libstrongswan/networking/streams/stream_service.c
src/libstrongswan/networking/streams/stream_service.h

index db38977..fb35a83 100644 (file)
@@ -107,7 +107,7 @@ METHOD(stream_manager_t, connect_, stream_t*,
 }
 
 METHOD(stream_manager_t, start_service, bool,
-       private_stream_manager_t *this, char *uri,
+       private_stream_manager_t *this, char *uri, int backlog,
        stream_service_cb_t cb, void *data)
 {
        running_entry_t *running;
@@ -121,7 +121,7 @@ METHOD(stream_manager_t, start_service, bool,
        {
                if (strpfx(uri, entry->prefix))
                {
-                       service = entry->create(uri);
+                       service = entry->create(uri, backlog);
                        if (service)
                        {
                                break;
index ab01417..ffb7ef3 100644 (file)
@@ -42,11 +42,12 @@ struct stream_manager_t {
         * Start a new service under an URI, accept()ing client connections.
         *
         * @param uri           URI of service to provide
+        * @param backlog       size of the backlog queue, as passed to listen()
         * @param cb            callback function invoked for each client connection
         * @param data          user data to pass to callback
         * @return                      TRUE if service started, FALSE on failure
         */
-       bool (*start_service)(stream_manager_t *this, char *uri,
+       bool (*start_service)(stream_manager_t *this, char *uri, int backlog,
                                                  stream_service_cb_t cb, void *data);
 
        /**
index ab7a7e3..8525039 100644 (file)
@@ -162,7 +162,7 @@ stream_service_t *stream_service_create_from_fd(int fd)
 /**
  * See header
  */
-stream_service_t *stream_service_create_unix(char *uri)
+stream_service_t *stream_service_create_unix(char *uri, int backlog)
 {
        struct sockaddr_un addr;
        mode_t old;
@@ -196,7 +196,7 @@ stream_service_t *stream_service_create_unix(char *uri)
                DBG1(DBG_NET, "changing socket permissions for '%s' failed: %s",
                         uri, strerror(errno));
        }
-       if (listen(fd, 5) < 0)
+       if (listen(fd, backlog) < 0)
        {
                DBG1(DBG_NET, "listen on socket '%s' failed: %s", uri, strerror(errno));
                unlink(addr.sun_path);
@@ -209,7 +209,7 @@ stream_service_t *stream_service_create_unix(char *uri)
 /**
  * See header
  */
-stream_service_t *stream_service_create_tcp(char *uri)
+stream_service_t *stream_service_create_tcp(char *uri, int backlog)
 {
        union {
                struct sockaddr_in in;
@@ -240,7 +240,7 @@ stream_service_t *stream_service_create_tcp(char *uri)
                close(fd);
                return NULL;
        }
-       if (listen(fd, 5) < 0)
+       if (listen(fd, backlog) < 0)
        {
                DBG1(DBG_NET, "listen on socket '%s' failed: %s", uri, strerror(errno));
                close(fd);
index f1dc643..91e5283 100644 (file)
@@ -26,12 +26,13 @@ typedef struct stream_service_t stream_service_t;
 #include <networking/streams/stream.h>
 
 /**
- * Constructor function prototype for stream_servicet.
+ * Constructor function prototype for stream_service_t.
  *
  * @param uri                  URI to create a stream for
+ * @param backlog              size of the backlog queue, as passed to listen()
  * @return                             stream instance, NULL on error
  */
-typedef stream_service_t*(*stream_service_constructor_t)(char *uri);
+typedef stream_service_t*(*stream_service_constructor_t)(char *uri, int backlog);
 
 /**
  * Service callback routine for accepting client connections.
@@ -79,16 +80,18 @@ stream_service_t *stream_service_create_from_fd(int fd);
  * Create a service instance for UNIX sockets.
  *
  * @param uri          UNIX socket specific URI, must start with "unix://"
+ * @param backlog      size of the backlog queue, as passed to listen()
  * @return                     stream_service instance, NULL on failure
  */
-stream_service_t *stream_service_create_unix(char *uri);
+stream_service_t *stream_service_create_unix(char *uri, int backlog);
 
 /**
  * Create a service instance for TCP sockets.
  *
  * @param uri          TCP socket specific URI, must start with "tcp://"
+ * @param backlog      size of the backlog queue, as passed to listen()
  * @return                     stream_service instance, NULL on failure
  */
-stream_service_t *stream_service_create_tcp(char *uri);
+stream_service_t *stream_service_create_tcp(char *uri, int backlog);
 
 #endif /** STREAM_SERVICE_H_ @}*/