aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/seatd.1.scd5
-rw-r--r--seatd/seatd.c18
2 files changed, 22 insertions, 1 deletions
diff --git a/man/seatd.1.scd b/man/seatd.1.scd
index ab79ee1..5945782 100644
--- a/man/seatd.1.scd
+++ b/man/seatd.1.scd
@@ -13,6 +13,11 @@ seatd - A seat management daemon
*-h*
Show help message and quit.
+*-n*
+ FD to notify readiness on. A single newline will be written and the fd
+ closed when seatd is ready to serve requests. This is compatible with
+ s6's notification protocol.
+
*-u <user>*
User to own the seatd socket.
diff --git a/seatd/seatd.c b/seatd/seatd.c
index 278f857..420847d 100644
--- a/seatd/seatd.c
+++ b/seatd/seatd.c
@@ -70,6 +70,7 @@ int main(int argc, char *argv[]) {
const char *usage = "Usage: seatd [options]\n"
"\n"
" -h Show this help message\n"
+ " -n <fd> FD to notify readiness on\n"
" -u <user> User to own the seatd socket\n"
" -g <group> Group to own the seatd socket\n"
" -s <path> Where to create the seatd socket\n"
@@ -78,9 +79,17 @@ int main(int argc, char *argv[]) {
int c;
int uid = 0, gid = 0;
+ int readiness = -1;
const char *socket_path = getenv("SEATD_SOCK");
- while ((c = getopt(argc, argv, "vhs:g:u:")) != -1) {
+ while ((c = getopt(argc, argv, "vhn:s:g:u:")) != -1) {
switch (c) {
+ case 'n':
+ readiness = atoi(optarg);
+ if (readiness < 0) {
+ fprintf(stderr, "Invalid readiness fd: %s\n", optarg);
+ return 1;
+ }
+ break;
case 's':
socket_path = optarg;
break;
@@ -149,6 +158,13 @@ int main(int argc, char *argv[]) {
log_info("seatd started");
+ if (readiness != -1) {
+ if (write(readiness, "\n", 1) == -1) {
+ log_errorf("Could not write readiness signal: %s\n", strerror(errno));
+ }
+ close(readiness);
+ }
+
while (server.running) {
if (poller_poll(&server.poller) == -1) {
log_errorf("Poller failed: %s", strerror(errno));