aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtests/fdpassing-socket.sh2
-rw-r--r--tests/fdpassing.c32
2 files changed, 26 insertions, 8 deletions
diff --git a/tests/fdpassing-socket.sh b/tests/fdpassing-socket.sh
index a006276..9c8225d 100755
--- a/tests/fdpassing-socket.sh
+++ b/tests/fdpassing-socket.sh
@@ -7,7 +7,7 @@ fi
./fdpassing$EXEEXT --server --socketname a.sock 2>/dev/null &
SERVER_PID=$!
-# Wait for server stats up
+# Wait for server starts up
sleep 1
./fdpassing$EXEEXT --socketname file://a.sock
diff --git a/tests/fdpassing.c b/tests/fdpassing.c
index eef447f..0e020c5 100644
--- a/tests/fdpassing.c
+++ b/tests/fdpassing.c
@@ -92,6 +92,16 @@ cmd_echo (assuan_context_t ctx, char *line)
return 0;
}
+static int server_done;
+static gpg_error_t
+cmd_kill (assuan_context_t ctx, char *line)
+{
+ (void)ctx;
+ log_info ("got KILL command (%s)\n", line);
+ server_done = 1;
+ return 0;
+}
+
static gpg_error_t
register_commands (assuan_context_t ctx)
{
@@ -101,10 +111,11 @@ register_commands (assuan_context_t ctx)
gpg_error_t (*handler) (assuan_context_t, char *line);
} table[] =
{
- { "ECHO", cmd_echo },
- { "INPUT", NULL },
- { "OUTPUT", NULL },
- { NULL, NULL }
+ { "ECHO", cmd_echo },
+ { "KILL", cmd_kill },
+ { "INPUT", NULL },
+ { "OUTPUT", NULL },
+ { NULL, NULL }
};
int i;
gpg_error_t rc;
@@ -130,7 +141,7 @@ server_common (assuan_context_t ctx)
assuan_set_log_stream (ctx, stderr);
- for (;;)
+ while (!server_done)
{
rc = assuan_accept (ctx);
if (rc)
@@ -243,7 +254,7 @@ server_socket (const char *socketname)
/* Client main. If true is returned, a disconnect has not been done. */
static int
-client (assuan_context_t ctx, const char *fname)
+client (assuan_context_t ctx, const char *fname, const char *sname)
{
int rc;
FILE *fp;
@@ -298,6 +309,13 @@ client (assuan_context_t ctx, const char *fname)
/* Give us some time to check with lsof that all descriptors are closed. */
/* sleep (10); */
+ if (sname)
+ {
+ rc = assuan_transact (ctx, "KILL", NULL, NULL, NULL, NULL, NULL, NULL);
+ if (rc)
+ log_error ("sending KILL failed: %s\n", gpg_strerror (rc));
+ }
+
assuan_release (ctx);
return 0;
}
@@ -452,7 +470,7 @@ main (int argc, char **argv)
}
fname = prepend_srcdir ("motd");
- if (client (ctx, fname))
+ if (client (ctx, fname, socketname))
{
log_info ("waiting for server to terminate...\n");
assuan_release (ctx);