From: Martin Willi Date: Fri, 28 Jun 2013 08:20:13 +0000 (+0200) Subject: stream: add backlog option to stream services, forward to listen() X-Git-Tag: 5.1.0rc1~10^2~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=441bb9e7b762bf234092d3ed1c64b61149e03ebe;p=thirdparty%2Fstrongswan.git stream: add backlog option to stream services, forward to listen() --- diff --git a/src/libstrongswan/networking/streams/stream_manager.c b/src/libstrongswan/networking/streams/stream_manager.c index db38977c1c..fb35a83700 100644 --- a/src/libstrongswan/networking/streams/stream_manager.c +++ b/src/libstrongswan/networking/streams/stream_manager.c @@ -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; diff --git a/src/libstrongswan/networking/streams/stream_manager.h b/src/libstrongswan/networking/streams/stream_manager.h index ab014175c2..ffb7ef3067 100644 --- a/src/libstrongswan/networking/streams/stream_manager.h +++ b/src/libstrongswan/networking/streams/stream_manager.h @@ -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); /** diff --git a/src/libstrongswan/networking/streams/stream_service.c b/src/libstrongswan/networking/streams/stream_service.c index ab7a7e38fc..85250390b4 100644 --- a/src/libstrongswan/networking/streams/stream_service.c +++ b/src/libstrongswan/networking/streams/stream_service.c @@ -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); diff --git a/src/libstrongswan/networking/streams/stream_service.h b/src/libstrongswan/networking/streams/stream_service.h index f1dc643f8d..91e5283bad 100644 --- a/src/libstrongswan/networking/streams/stream_service.h +++ b/src/libstrongswan/networking/streams/stream_service.h @@ -26,12 +26,13 @@ typedef struct stream_service_t stream_service_t; #include /** - * 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_ @}*/