#include <sys/un.h>
#include <unistd.h>
#include <poll.h>
+#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
return 0;
}
+/* Called after a fork. */
+
+int ustcomm_close_all_connections(struct ustcomm_server *server)
+{
+ struct ustcomm_connection *conn;
+ struct ustcomm_connection *deletable_conn = NULL;
+
+ list_for_each_entry(conn, &server->connections, list) {
+ free(deletable_conn);
+ deletable_conn = conn;
+ close(conn->fd);
+ list_del(&conn->list);
+ }
+
+ return 0;
+}
+
/* @timeout: max blocking time in milliseconds, -1 means infinity
*
* returns 1 to indicate a message was received
}
if(path_out) {
- *path_out = "";
- *path_out = strdupa(addr.sun_path);
+ *path_out = strdup(addr.sun_path);
}
return fd;
return retval;
}
+void ustcomm_fini_app(struct ustcomm_app *handle)
+{
+ int result;
+ struct stat st;
+
+ /* Destroy socket */
+ result = stat(handle->server.socketpath, &st);
+ if(result == -1) {
+ PERROR("stat (%s)", handle->server.socketpath);
+ return;
+ }
+
+ /* Paranoid check before deleting. */
+ result = S_ISSOCK(st.st_mode);
+ if(!result) {
+ ERR("The socket we are about to delete is not a socket.");
+ return;
+ }
+
+ result = unlink(handle->server.socketpath);
+ if(result == -1) {
+ PERROR("unlink");
+ }
+}
+
static char *find_tok(char *str)
{
while(*str == ' ') {