Code

client: Added sdb_client_shutdown().
[sysdb.git] / src / include / frontend / sock.h
index 1951614e7ba5362cdd6eb4bfd1dc380b54832a08..2b93a6f724d1adaca687d81e149fa49fecb5bf68 100644 (file)
@@ -25,6 +25,8 @@
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <unistd.h>
+
 #ifndef SDB_FRONTEND_SOCK_H
 #define SDB_FRONTEND_SOCK_H 1
 
 extern "C" {
 #endif
 
+/* manage a front-end listener loop */
+typedef struct {
+       /* number of handler threads to create */
+       size_t num_threads;
+
+       /* front-end listener shuts down when this is set to false */
+       _Bool do_loop;
+} sdb_fe_loop_t;
+#define SDB_FE_LOOP_INIT { 5, 1 }
+
 /*
  * sdb_fe_socket_t:
  * A front-end socket accepting connections from clients.
@@ -71,16 +83,26 @@ sdb_fe_sock_destroy(sdb_fe_socket_t *sock);
 int
 sdb_fe_sock_add_listener(sdb_fe_socket_t *sock, const char *address);
 
+/*
+ * sdb_fe_sock_clear_listeners:
+ * Shut down all listeners from the socket object and clear the list of
+ * listeners. All open connections will not be affected by this.
+ */
+void
+sdb_fe_sock_clear_listeners(sdb_fe_socket_t *sock);
+
 /*
  * sdb_fe_sock_listen_and_serve:
- * Listen on the specified socket and serve client requests.
+ * Listen on the specified socket and serve client requests. The loop
+ * terminates on error or when the loop condition turns to false. All
+ * listening sockets will be closed at that time.
  *
  * Returns:
  *  - 0 on success
  *  - a negative value else
  */
 int
-sdb_fe_sock_listen_and_serve(sdb_fe_socket_t *sock);
+sdb_fe_sock_listen_and_serve(sdb_fe_socket_t *sock, sdb_fe_loop_t *loop);
 
 #ifdef __cplusplus
 } /* extern "C" */